用于变量名的r中的for循环

时间:2018-06-08 10:25:50

标签: r for-loop

我试图为一组变量重复复杂的语法。实质上, 使用如下数据集:

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。有一个简单的工作吗?

更新:我没有计算平均值,而是有一个更复杂的函数,我反复需要访问变量名。我的问题是不是关于计算方法而是使用循环函数。

2 个答案:

答案 0 :(得分:1)

您可以将summarise_atbind_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的解决方案,但后来我并不确切知道你在做什么......