R包sqldf总和多列

时间:2014-06-18 21:45:17

标签: r sum typing sqldf

假设我想使用sqldf("从id,group"中选择数据组中的id,group,sum(v1),sum(v2),..... sum(90)进行汇总。 ),

由于我有超过90个变量,有没有办法比键入90次更有效率?

谢谢!

1 个答案:

答案 0 :(得分:4)

为了示例,使用内置的anscombe数据集添加idgrp列。然后创建选择字符串sel,并将其插入到SQL语句中,如下所示:

library(sqldf)
anscombe$id <- c(1, 1, 2, 2, 2, 3, 3, 4, 4, 4, 4)
anscombe$grp <- c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2)

nms <- setdiff(names(anscombe), c("id", "grp")) # names except id and grp
sel <- toString(sprintf("sum(%s) '%s'", nms, nms)) # "sum(x1) 'x1', ..."
fn$sqldf("select id, grp, $sel from anscombe group by id, grp")

,并提供:

  id grp x1 x2 x3 x4    y1    y2    y3    y4
1  1   1 18 18 18 16 14.99 17.28 14.23 12.34
2  2   1 33 33 33 24 24.72 26.77 27.66 25.02
3  3   2 20 20 20 16 17.20 14.23 14.92 12.29
4  4   2 28 28 28 43 25.60 24.23 25.69 32.86

另请注意,这对基础R很容易做到:

aggregate(. ~ id + grp, anscombe, sum)