我有一个看起来像这样的数据框:
entry color value1 value2
A blue 1 0
A green 1 0
B green 1 0
C red 0 1
我要合并所有列(输出颜色除外)具有相同值的行:
entry color value1 value2
A blue, green 1 0
B green 1 0
C red 0 1
我已尝试使用plyr
和ddply
来回答问题https://www.biostars.org/p/167028/。这段代码为这个最小的示例提供了正确的输出。但是,我的实际数据集有600列,因此这不是可行的解决方案。有人对大型数据集有什么建议吗?
df2 <-ddply(df, .(entry), summarize,
color=paste(unique(color),collapse=","),
value1=paste(unique(value1),collapse=",") ,
value2= paste(unique(value2),collapse=","))
示例数据框为:
df <- data.frame("entry" = c("A", "A", "B", "C"),"color" = c("blue", "green", "green", "red"), "value1" = c(1,1,1,0), "value2" = c(0,0,0,1))
编辑:为解决可伸缩性问题,我改编了以下答案和Group by multiple columns in dplyr, using string vector input
首先使用其索引创建一个由列名组成的向量,减去感兴趣的列:
cnames <- names(df)[-2]
然后使用group_by_at
中的dplyr
函数:
df %>%
group_by_at(vars(one_of(cnames))) %>%
summarise(color=paste(unique(color), collapse=",")) %>%
ungroup()
答案 0 :(得分:2)
您可以尝试tidyverse
library(tidyverse)
df %>%
group_by(entry, value1, value2) %>%
summarise(color=paste(unique(color), collapse=",")) %>%
ungroup()
# A tibble: 3 x 4
entry value1 value2 color
<fct> <dbl> <dbl> <chr>
1 A 1 0 blue,green
2 B 1 0 green
3 C 0 1 red
如果要像这样列出重复项,请删除unique
summarise(color=toString(color))