我试图为一组变量重复复杂的语法。实质上, 使用如下数据集:
df <- data.frame( X=1:10, Y=6:15, Z=11:20)
我想替换语法:
mean(df$X)
mean(df$Y)
mean(df$Z)
使用循环:
for (n in c("X", "Y", "Z")) {mean(df$n)}
但是,这种类似Stata的编程在R中不起作用。似乎循环写df$"X"
而不是df$X
。有一个简单的工作吗?
更新:我没有计算平均值,而是有一个更复杂的函数,我反复需要访问变量名。我的问题是不是关于计算方法而是使用循环函数。
答案 0 :(得分:1)
您可以将summarise_at
与bind_cols
一起使用。
在下面的代码中,我已在mean
列上使用X, Y
&amp;专栏max
上的Y, Z
。同样,您也可以在多组不同的列上应用自己的函数。
library(dplyr)
df %>%
summarise_at(vars(X, Y), funs(Mean = mean)) %>%
bind_cols(df %>%
summarise_at(vars(Y, Z), funs(Max = max)))
给出了
X_Mean Y_Mean Y_Max Z_Max
1 5.5 10.5 15 20
示例数据:
df <- structure(list(X = 1:10, Y = 6:15, Z = 11:20), .Names = c("X",
"Y", "Z"), row.names = c(NA, -10L), class = "data.frame")
答案 1 :(得分:0)
这样做了。
for(n in c("X", "Y", "Z")) {mean(df[, n])}
要查看输出,请在mean
中包裹print()
:
# [1] 5.5
# [1] 10.5
# [1] 15.5
我仍然赞成@ Prem的解决方案,但后来我并不确切知道你在做什么......