我在R中有以下数据框:
objects categories
A 162
B 162
B 190
C 123
C 162
C 185
C 190
C 82
C 191
D 185
如您所见,有对象及其所属的类别。我想在逗号分隔列表中总结每个对象的类别,以获得如下所示的数据框:
objects categories
A 162
B 162, 190
C 123, 162, 185, 190, 82, 191
D 185
我怎么能这样做?
答案 0 :(得分:4)
aggregate(categories~objects,data=x,FUN=paste)
objects categories
1 A 162
2 B 162, 190
3 C 123, 162, 185, 190, 82, 191
4 D 185
答案 1 :(得分:3)
这可以使用您选择的任何聚合工具完成,我将使用plyr
包和paste()
函数显示示例。这假设您的数据名为x
:
library(plyr)
ddply(x, .(objects), summarize, categories = paste(categories, collapse = ","))
#-----
objects categories
1 A 162
2 B 162,190
3 C 123,162,185,190,82,191
4 D 185
答案 2 :(得分:2)
如问题标题所示,请使用aggregate
:
aggregate(list(categories=df$categories), by=list(objects=df$objects), c)
# objects categories
# 1 A 162
# 2 B 162, 190
# 3 C 123, 162, 185, 190, 82, 191
# 4 D 185
答案 3 :(得分:1)
汇总如果DF
是您的数据框,请尝试以下操作:
aggregate(categories ~ objects, DF, function(x) toString(unique(x)))
sqldf 使用sqldf可以:
library(sqldf)
sqldf("select objects, group_concat(distinct categories) as categories
from DF group by objects")
答案 4 :(得分:1)
data.table
解决方案
library(data.table)
DT <- as.data.table(DF)
DT[,list(categories = list(categories)), by = objects]
## objects categories
## 1: A 162
## 2: B 162,190
## 3: C 123,162,185,190,82,191
## 4: D 185