如何在列名以字符串存储时结合dplyr使用is.na()?
解决
is.na()结合字符列名的筛选问题 你的问题出在:直接在is.na()里用字符变量column时,subset会把它当成列名去查找,但你的数据集里并没有名为column的列,自然得不到正确结果。下面给你几种实用的解决方式:
方式1:用dplyr(tidyverse)结合tidy evaluation
如果你习惯用tidyverse工具,两种写法都可以:
- 用
sym()把字符串转成符号,再通过!!注入到表达式中:
library(dplyr) column <- "Sepal.Length" iris_na <- rbind(iris, rep(NA,5)) iris_na %>% filter(is.na(!!sym(column)))
- 用
.data代词直接引用字符列名(更简洁,无需额外符号转换):
iris_na %>% filter(is.na(.data[[column]]))
方式2:用base R的subset函数实现
如果坚持用subset,可以用get()来读取字符变量对应的列:
iris_na %>% subset(is.na(get(column)))
或者结合sym()和eval():
iris_na %>% subset(is.na(eval(sym(column))))
另外注意你原代码里的管道符少了一个%,要写成%>%才生效。
内容的提问来源于stack exchange,提问作者Wojty
相关产品推荐
相关产品推荐

