假设我有一个像这样的数据帧
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
如果我们也需要进行反向操作,有几种方法。
- 从输出中,通过+总结操作进行分组
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=",")
- 另一种方法是复制列"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