在dplyr的mutate函数中使用all_of引用变量时输出不符合预期的问题咨询
问题解决:在
case_when中正确引用字符串变量指定的列 你遇到的问题是因为all_of()在case_when()的逻辑判断表达式里无法直接解析为目标列——all_of()主要设计用于select()这类批量选择列的场景,而在mutate的计算逻辑中,直接使用它不会触发tidyeval的列解析机制,导致R无法识别你要引用的是Col1列。
两种可行的解决方案:
1. 使用.data代词(dplyr推荐方式)
.data是dplyr提供的代词,用于明确引用数据框中的列,配合[[可以直接用字符串索引列:
library(dplyr) asd <- data.frame(Col1 = c("A","B"), Col2 = c("R","E")) a1 <- "Col1" asd %>% mutate(q1 = case_when(.data[[all_of(a1)]] == "A" ~ 1))
2. 使用tidyeval符号注入
先把字符串转换成R符号,再用!!(bang-bang)运算符将其注入到表达式中:
library(dplyr) library(rlang) # 加载rlang包提供sym函数 asd <- data.frame(Col1 = c("A","B"), Col2 = c("R","E")) a1 <- "Col1" asd %>% mutate(q1 = case_when(!!sym(a1) == "A" ~ 1))
执行结果
两种方法都能得到你预期的输出:
Col1 Col2 q1 1 A R 1 2 B E NA
内容的提问来源于stack exchange,提问作者user11740857
相关产品推荐
相关产品推荐

