【问题标题】: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 转换为符号,也无需使用任何!!。相反,使用[[ 进行子集化