如何基于R中的列扩展data.frame

  • 本文关键字:扩展 data frame 何基于 r
  • 更新时间 :
  • 英文 :


假设我有一个像这样的数据帧

df <- data.frame(x=1:3, y=c('a,b,c','c,d', 'f,g'))
df
x     y
1 1 a,b,c
2 2   c,d
3 3   f,g

有什么简单的方法可以让它像一样

df
x y
1 1 a
2 1 b
3 1 c
4 2 c
5 2 d
6 3 f
7 3 g

例如对于CCD_ 2的每个元素将列CCD_。

更简单的选项是separate_rows

library(tidyr)
library(dplyr)
out <- df %>% 
separate_rows(y)

-输出

out
# A tibble: 7 x 2
x y    
<int> <chr>
1     1 a    
2     1 b    
3     1 c    
4     2 c    
5     2 d    
6     3 f    
7     3 g    

如果我们也需要进行反向操作,有几种方法。

  1. 从输出中,通过+总结操作进行分组
out %>%
group_by(x) %>%
summarise(y = toString(y), .groups = 'drop')
# A tibble: 3 x 2
x y      
<int> <chr>  
1     1 a, b, c
2     2 c, d   
3     3 f, g   

CCD_ 4在CCD_。如果我们不想要space,请使用paste(y, collapse=",")stringr::str_c(y, collapse=",")

  1. 另一种方法是复制列"y",并选择该列和"x",然后获得distinct。当只有一列,即没有"x"列时,这也应该起作用(因此我们不知道它是如何拆分的(
out <- df %>% 
mutate(y1 = y) %>%
separate_rows(y1) 
distinct(out, x, y)
# A tibble: 3 x 2
x y    
<int> <chr>
1     1 a,b,c
2     2 c,d  
3     3 f,g  

最新更新