需要使用dplyr对多列变量中的数据行求和

4

虽然他人曾提出过类似问题,但是他们的数据结构有些不同。我的数据集包含多个分组变量和数值数据的列。我需要对每一行的数值数据求和并将结果输出到一个新的数据列中。请参考下面的DATA数据集和期望的RESULTS表格。我希望使用dplyr中的mutate函数找到解决方案。我主要使用dplyr包来操作我的数据集。尽管我可以通过dplyr中的gathergroup_bysumarise函数完成这个任务,但是我在处理非常大的数据集时会出现“gathered”数据表超过2,000,000行的情况。感谢您的帮助。

DATA = data.frame(SITE = c("A","A","A","A","B","B","B","C","C"), 
                  DATE = c("1","1","2","2","3","3","3","4","4"), 
                  STUFF = c(1, 2, 30, 40, 100, 200, 300, 5000, 6000),
                  STUFF2 = c(2, 4, 60, 80, 200, 400, 600, 10000, 12000))

RESULT = data.frame(SITE = c("A","A","A","A","B","B","B","C","C"), 
                    DATE = c("1","1","2","2","3","3","3","4","4"), 
                    STUFF = c(1, 2, 30, 40, 100, 200, 300, 5000, 6000),
                    STUFF2 = c(2, 4, 60, 80, 200, 400, 600, 10000, 12000),
                    SUM_STUFF = c(3, 6, 90, 120, 300, 600, 900, 15000, 18000))

2
如果您使用dplyr,mutate(DATA, SUM_STUFF = rowSums(DATA[,3:4])) 应该是其中的一种方式。 - jazzurro
...或者稍微快一点(但是基于R语言)的 within(DATA, { SUMS=rowSums(DATA[,3:4]) }) - r2evans
...或者更通用的 within(DATA, { SUMS=rowSums(DATA[,sapply(DATA, is.numeric)]) }),它将对所有数值列求和...有点激进,但没有魔法常量! - r2evans
1个回答

3
这似乎符合您的需求:
RESULT <- DATA %>%
  rowwise() %>%
  mutate(SUM_STUFF = sum(STUFF,STUFF2))

关键是使用 rowwise(可能是在你提出问题后的某个版本中添加到了 dplyr 中)。
> RESULT
Source: local data frame [9 x 5]
Groups: <by row>

    SITE   DATE STUFF STUFF2 SUM_STUFF
  (fctr) (fctr) (dbl)  (dbl)     (dbl)
1      A      1     1      2         3
2      A      1     2      4         6
3      A      2    30     60        90
4      A      2    40     80       120
5      B      3   100    200       300
6      B      3   200    400       600
7      B      3   300    600       900
8      C      4  5000  10000     15000
9      C      4  6000  12000     18000

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接