我想对这些数据进行分组,但在分组时对某些列应用不同的函数。
ID type isDesc isImage
1 1 1 0
1 1 0 1
1 1 0 1
4 2 0 1
4 2 1 0
6 1 1 0
6 1 0 1
6 1 0 0
我想按类型分组,列isDesc
和isImage
可以相加,但我想获得ID
的值。在整个数据集中,type
将是相同的。结果应该如下所示:
ID type isDesc isImage
1 1 1 2
4 2 1 1
6 1 1 1
目前我正在使用
library(plyr)
summarized = ddply(data, .(ID), numcolwise(sum))
但它只是简单地汇总了所有列。你不一定要使用ddply
,但如果你认为它对工作有好处,我会坚持使用它。data.table
库也是一种替代方法
发布于 2013-03-15 21:54:13
使用data.table
require(data.table)
dt <- data.table(data, key="ID")
dt[, list(type=type[1], isDesc=sum(isDesc),
isImage=sum(isImage)), by=ID]
# ID type isDesc isImage
# 1: 1 1 1 2
# 2: 4 2 1 1
# 3: 6 1 1 1
使用plyr
ddply(data , .(ID), summarise, type=type[1], isDesc=sum(isDesc), isImage=sum(isImage))
# ID type isDesc isImage
# 1 1 1 1 2
# 2 4 2 1 1
# 3 6 1 1 1
编辑:使用data.table
的.SDcols
,如果你有太多的列需要求和,而其他列只取第一个值,你可以这样做。
dt1 <- dt[, lapply(.SD, sum), by=ID, .SDcols=c(3,4)]
dt2 <- dt[, lapply(.SD, head, 1), by=ID, .SDcols=c(2)]
> dt2[dt1]
# ID type isDesc isImage
# 1: 1 1 1 2
# 2: 4 2 1 1
# 3: 6 1 1 1
您可以将列名或列号作为参数提供给.SDcols。例如:.SDcols=c("type")
也有效。
https://stackoverflow.com/questions/15434123
复制相似问题