You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言for循环用动态变量名调用mutate重编码问卷数据异常求助

你的代码存在三个问题:

  1. 自定义函数中直接传入列名字符串i,case_when逻辑判断时取的是字符串本身而非数据框的对应列,无法正确执行逻辑
  2. 循环每次基于原始df1生成新数据,前一次修改的结果没有被保留,处理完var2后会覆盖之前var1的修改结果
  3. 数值型var0和字符串'1'比较,可能因数据类型不匹配导致逻辑判断出错

方案1 调整原有循环逻辑

library(dplyr)

vars = c("var1", "var2")

func <- function(df, col_name) {
  col_val <- df[[col_name]]
  df %>%
    mutate(!!col_name := case_when(
      !is.na(col_val) ~ col_val,
      is.na(col_val) & var0 != 1 ~ 4444,
      TRUE ~ 0
    ))
}

df2 <- df1
for(i in vars) {
  df2 <- func(df2, i)
}

方案2 用dplyr的across语法更简洁处理多列,无需循环

df2 <- df1 %>%
  mutate(across(all_of(vars), ~ case_when(
    !is.na(.) ~ .,
    is.na(.) & var0 != 1 ~ 4444,
    TRUE ~ 0
  )))

两种方案运行后得到的df2都和你期望的结果完全一致。


内容的提问来源于stack exchange,提问作者Quinterpret

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 00:57:03