我的数据如下所示。
id MONTH DAY VAR1 VAR2 VAR3 ...
1 10 21 5 1 "a"
1 10 21 4 2 "a"
1 10 22 3 4 "b"
1 11 25 5 1 "a"
2 10 10 5 1 "c"
2 10 10 7 5 "c"
2 10 28 5 1 "a"
...
根据数据,如果id,MONTH,DAY相同,如第1行和第2行,我想得到总和VAR1和平均VAR2,否则保留。因此,我想要的结果应该是
id MONTH DAY VAR1 VAR2 VAR3 ...
1 10 21 9 1.5 "a"
1 10 22 3 4 "b"
1 11 25 5 1 "a"
2 10 10 12 3 "c"
2 10 28 5 1 "a"
...
如果id,MONTH,DAY相同,VAR3是相同的。
我想我可以重复使用聚合为每个总和和平均功能,但它似乎很麻烦。通过保留我的数据格式有一种简单的方法吗?
答案 0 :(得分:1)
尝试:
library(dplyr)
df %>%
group_by(id, MONTH, DAY) %>%
summarise(VAR1 = sum(VAR1), VAR2 = mean(VAR2), first(VAR3))
给出了:
#Source: local data frame [5 x 6]
#Groups: id, MONTH [?]
#
# id MONTH DAY VAR1 VAR2 first(VAR3)
# (int) (int) (int) (int) (dbl) (fctr)
#1 1 10 21 9 1.5 a
#2 1 10 22 3 4.0 b
#3 1 11 25 5 1.0 a
#4 2 10 10 12 3.0 c
#5 2 10 28 5 1.0 a
答案 1 :(得分:1)
您还可以在data.table
组中轻松进行多项计算,例如:
DT[, ("VAR1.sum", "VAR2.mean") := .(sum(VAR1), mean(VAR2)), by = .(id, MONTH, DAY)]