【问题标题】:Dollar sign and for loop美元符号和 for 循环
【发布时间】:2021-08-13 04:48:53
【问题描述】:

假设我有一个包含 16 个变量的数据框,名为:Amount_day_1, Amount_day_2 .. 我想取每个的平均值

我想做的是:

for (i in 1:16){
  !!as.name(paste0("Mean_Amount_Day_", i) <- 
         mean(df$!!as.name(paste0("Amount_Day_", i)))
}

但它确实不起作用。事实上,如果它在for 循环内,我真的不知道如何选择带有美元符号的变量?

【问题讨论】:

标签: r for-loop dplyr tidyverse


【解决方案1】:

我们可以使用colMeans 来创建一个单一的named vector 手段

colMeans(df, na.rm = TRUE)

注意:不建议在全局环境中创建多个对象


for 循环中,如果我们正在创建对象,请使用assign

for(i in seq_along(df)) {
     assign(paste0("Mean_Amount_Day_", i), mean(df[[i]], na.rm = TRUE))
 }

列可以按列名或索引作为子集。正如 OP 提到他们需要所有列的 mean 并且按索引循环,使用索引来提取列。此外,无需使用as.name 转换为符号,也无需使用任何!!。相反,使用[[ 进行子集化

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-22
    • 1970-01-01
    • 1970-01-01
    • 2010-12-14
    相关资源
    最近更新 更多