通过对R中的某些变量求和并求平均来减少数据

时间:2016-05-24 22:37:28

标签: r database dplyr

我的数据如下所示。

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是相同的。
我想我可以重复使用聚合为每个总和和平均功能,但它似乎很麻烦。通过保留我的数据格式有一种简单的方法吗?

2 个答案:

答案 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)]