dplyr和r中的循环

时间:2015-09-01 15:52:38

标签: r for-loop dplyr

所以这就是问题:我想在我的R代码中使用for循环来总结不同的列。

作为一个例子,这里看起来像是什么:

all.columns<-c("column4","column5","column6","column7")
for (i in 1:4) {  
df%>%
 group_by(column3)%>%
 summarise(Mean=mean(all.columns[i]),
           Max=max(all.columns[i]))
} 

其中df是数据框,column3可以是Year by Year变量,第5列到第7列是我想用相同代码重复检查的。

你知道如何使用dplyr执行此操作吗?如果你是没有dplyr的替代方案,我想听听它。

我已尝试输入该列的字符名称,但它无效...

2 个答案:

答案 0 :(得分:5)

这个怎么样:

虚假数据:

df <- data.frame(column3=rep(letters[1:2], 10), 
                 column4=rnorm(20),
                 column5=rnorm(20),
                 column6=rnorm(20),
                 column7=rnorm(20))

dplyr解决方案:

library(dplyr)
df %>% 
  group_by(column3) %>% 
  summarise_each(funs(mean, max), column4:column7)

输出:

Source: local data frame [2 x 9]

  column3 column4_mean column5_mean column6_mean column7_mean column4_max column5_max
1       a     0.186458   0.02662053  -0.00874544    0.3327999    1.563171    2.416697
2       b     0.336329  -0.08868817   0.31777871    0.1934266    1.263437    1.142430
Variables not shown: column6_max (dbl), column7_max (dbl)

答案 1 :(得分:0)

这不起作用,因为当您将列名称存储为字符时,它们就像调用列名一样。

我知道可以使用data.table完成此操作:

dt = data.table(df)
dt[, lapply(.SD, function(x) data.table(mean(x), max(x))),
    by = column3, .SDcols = all.columns]