【问题标题】:for loop in r with variable names带有变量名的r中的for循环
【发布时间】:2018-11-18 09:25:20
【问题描述】:

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

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。有没有简单的解决方法?

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

【问题讨论】:

  • sapply(df,mean) 怎么样?

标签: r for-loop


【解决方案1】:

您可以将summarise_atbind_cols 一起使用。

在下面的代码中,我在X, Y 列上应用了meanmaxY, 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")

【讨论】:

  • 谢谢,dplyr 是计算统计数据的好方法。但是,我的问题在于 for 循环(请参阅更新)。
【解决方案2】:

这样就可以了。

for(n in c("X", "Y", "Z")) {mean(df[, n])}

要查看输出,请将mean 包装在print() 中:

# [1] 5.5
# [1] 10.5
# [1] 15.5

我仍然赞成@Prem 的解决方案,但是我不知道你在做什么......

【讨论】:

  • 谢谢!!!这种访问数据列的替代方法解决了我的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-04
  • 2019-11-19
  • 1970-01-01
  • 2014-06-12
  • 1970-01-01
相关资源
最近更新 更多