R语言for循环用动态变量名调用mutate重编码问卷数据异常求助
你的代码存在三个问题:
- 自定义函数中直接传入列名字符串i,case_when逻辑判断时取的是字符串本身而非数据框的对应列,无法正确执行逻辑
- 循环每次基于原始df1生成新数据,前一次修改的结果没有被保留,处理完var2后会覆盖之前var1的修改结果
- 数值型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
相关产品推荐
相关产品推荐

