这是我提出的过去问题的延续。基本上,我有一个数据框df
Beginning1 Protein2 Protein3 Protein4 Biomarker1
Pathway3 A G NA NA F
Pathway6 A G NA NA E
Pathway2 A B H NA F
Pathway5 A B H NA E
Pathway1 A D K NA F
Pathway7 A B C D F
Pathway4 A B C D E
现在我想整合行看起来像这样:
dfnew
Beginning1 Protein2 Protein3 Protein4 Biomarker1
Pathway3 A G NA NA F, E
Pathway2 A B H NA F, E
Pathway7 A D K NA F
Pathway1 A B C D F, E
我已经看到很多人使用聚合在数据框架中合并相同的行,但我似乎无法使用该函数来处理非数值。我见过的最接近的问题是这样解决的:df1 <- aggregate(df[7], df[-7], unique)
,可以在这里找到:Combining duplicated rows in R and adding new column containing IDs of duplicates。
此外,并非每条途径都有匹配对,如路径1所示。
非常感谢你的帮助!
答案 0 :(得分:1)
使用
df %>%
group_by(Protein2, Protein3, Protein4) %>%
nest() %>%
mutate(Biomarker1 = lapply(data, `[[`, 'Biomarker1'),
Biomarker1 = unlist(lapply(Biomarker1, paste, collapse = ', '))) %>%
ungroup() %>%
# Restore the “Beginning1” column is a bit of work, unfortunately.
mutate(Beginning1 = lapply(data, `[[`, 'Beginning1'),
Beginning1 = unlist(lapply(Beginning1, `[[`, 1))) %>%
select(-data)
答案 1 :(得分:0)
这是一个应该产生预期结果的dplyr解决方案。
library(dplyr)
df <- df %>%
group_by(Beginning1, Protein2, Protein3, Protein4) %>%
summarise(Biomarker1 = paste(Biomarker1, collapse = ", "))