从数据帧中,我需要一列的所有唯一值的列表。为了以后可能的检查,我们需要保留来自第二列的信息,但为了简单地合并。
Sample data
df <- data.frame(id=c(1,3,1),source =c("x","y","z"))
df
id source
1 1 x
2 3 y
3 1 z
期望的结果是
df2
id source
1 1 x,z
2 3 y
这应该很容易,但我仍然找不到适当的功能/语法?
。就像
df %>%
+ group_by(id) %>%
+ summarise(vlist = paste0(source, collapse = ","))
或
df %>%
+ distinct(id) %>%
+ summarise(vlist = paste0(source, collapse = ","))
我错过了什么?谢谢你的建议!
您可以使用aggregate
fromstats来组合每组
aggregate(source ~ id, df, paste, collapse = ",")
# id source
#1 1 x,z
#2 3 y
使用下面的代码是一个解决方案:
library(dplyr)
df <- data.frame(id=c(1,3,1),source =c("x","y","z"))
df %>%
group_by(id) %>%
summarise(vlist = paste0(source, collapse = ",")) %>%
distinct(id, .keep_all = TRUE)
# A tibble: 2 x 2
id vlist
<dbl> <chr>
1 1 x,z
2 3 y
第二种方法不起作用,因为在聚合数据之前调用了distinct
。此外,您需要使用.keep_all = TRUE
来保留另一列。
你的第一个方法缺少distinct
。
aggregate(source ~ id, df, toString)