R - 分组数据但对不同的列应用不同的函数

标签 r grouping data.table plyr

我想对这些数据进行分组,但在分组时对某些列应用不同的函数。

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

我要分组 ID , 列 isDescisImage可以求和,但我想按原样获得 type 的值。 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图书馆也是一种选择

最佳答案

使用 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")也是有效的。

关于R - 分组数据但对不同的列应用不同的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15434123/

相关文章:

r - 按位置分组,而不是按数据框中列的名称分组

python - 将元组列表分组到 Python 中的字典

javascript - 对数组中对象的数据进行分组

r - data.table - 连接 NA 键

r - data.table R 中列表/多列条件中的列名称

r - ggplot2热图,带有用于范围值的颜色

r - 将 ggplot2 geoms 添加到简单的特征图

r - 条件键连接/更新_and_更新匹配的标志列

r - 通过匹配两列的值来过滤数据框

css - Extjs4 多组 header value css