1

我在 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

我怎么能这样做?

4

5 回答 5

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
于 2012-07-24T16:25:02.253 回答
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
于 2012-07-24T16:24:36.327 回答
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
于 2012-07-24T16:25:08.073 回答
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")
于 2012-07-24T16:30:03.540 回答
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
于 2012-09-10T04:55:00.673 回答