R语言循环创建多变量失败求助:列相乘生成新变量遇警告
问题原因及解决方法
你的代码问题出在动态列名的引用方式错误:
- 你试图用
data$year_[i]访问列,但实际上没有名为year_的列,只有year_1951、year_1952这类带年份后缀的列,直接用$加变量拼接的写法不生效,得用字符串拼接列名后通过[[ ]]来引用。 - 新列的命名方式也错了,
data$reg2_year_[i]不是正确的动态生成列名的写法,同样需要先拼接出完整的新列名,再赋值。
正确的循环写法
for (i in 1951:2010) { # 拼接原始年份列的完整名称 year_col_name <- paste0("year_", i) # 拼接新列的完整名称 new_col_name <- paste0("reg2_year_", i) # 计算并赋值新列 data[[new_col_name]] <- data$reg_2 * data[[year_col_name]] }
更简洁的非循环写法(推荐)
用dplyr包的across函数可以不用写循环,直接批量处理所有目标列:
library(dplyr) data <- data %>% mutate(across(starts_with("year_"), ~ reg_2 * ., .names = "reg2_{.col}"))
这个代码会自动匹配所有以year_开头的列,每列和reg_2相乘后,生成以reg2_year_开头的新列,比循环更高效易读。
内容的提问来源于stack exchange,提问作者Soham Sinha
相关产品推荐
相关产品推荐

