所以这就是问题:我想在我的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的替代方案,我想听听它。
我已尝试输入该列的字符名称,但它无效...
答案 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]