在R中合并具有相同Id的行,仅保留唯一条目

3

我是R语言的初学者。我有一个R数据框,如下所示:

 Id          Values
A_0_d   Low_5524; Low_6412; Hi_50567
A_0_d   Low_5509; Low_6412; Low_6897; Hi_16021
A_0_d   Low_5524; Low_4930; Low_5886
B_1_d   Low_3697; Low_4519; Low_5524
C_3_d   Low_5576; Low_5581
C_3_d   Hi_30246
C_3_d   Low_5576; Hi_30246

我希望根据Id汇总数据框,即将相同ID的所有值分组为单行并保留唯一条目,如下所示:
A_0_d   Low_5524; Low_6412; Hi_50567; Low_5509; Low_6897; Hi_16021; Low_4930; Low_5886  
B_1_d   Low_3697; Low_4519; Low_5524
C_3_d   Low_5576; Low_5581; Hi_30246 

我能够使用聚合函数吗?请指导我。

3个回答

3
使用aggregate,您可以尝试这样做。
aggregate(Values ~ Id, df, function(x) paste(unique(x), collapse = '; '))

2

将'data.frame'转换为'data.table' (setDT(df1))。然后,在按'Ids'分组后,split 'Values'通过"; "分割,unlist输出,获取unique元素并paste在一起。

library(data.table)
setDT(df1)[, .(Values = paste(unique(unlist(strsplit(Values, "; "))), 
                                                 collapse="; ")), by = Id]
#   Id
#1: A_0_d
#2: B_1_d
#3: C_3_d
#                                                                           Values
#1: Low_5524; Low_6412; Hi_50567; Low_5509; Low_6897; Hi_16021; Low_4930; Low_5886
#2:                                                   Low_3697; Low_4519; Low_5524
#3:                                                   Low_5576; Low_5581; Hi_30246

2

使用aggregate,您可以

aggregate(Values~Id, df, function(x) unique(unlist(strsplit(x, ";"))))

#   Id                                                                         Values
#1  A_0_d Low_5524, Low_6412, Hi_50567, Low_5509, Low_6897, Hi_16021, Low_4930, Low_5886
#2 B_1_d                                                   Low_3697, Low_4519, Low_5524
#3 C_3_d                                                   Low_5576, Low_5581, Hi_30246

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接