如何在R中筛选ParentName为空或指定值的数据集?
解决方法
首先你用||失败是因为它是标量逻辑运算符,只会返回单个TRUE/FALSE,而数据框筛选需要对每个元素判断的向量逻辑运算符|。另外要注意R里数据框的空值通常以NA形式存在(你说的NULL在数据框列里会被自动转成NA),还有可能存在空白字符串"",得把这两种情况都覆盖到。
方法一:基础R原生语法
直接用方括号筛选,把两种空值情况和目标值组合起来:
# 筛选 ParentName 为"South East region"、空白字符串,或是NA的记录 mydata <- df[df$ParentName %in% c("South East region", "") | is.na(df$ParentName), ]
拆解一下:
%in% c("South East region", "")匹配目标区域值和空白字符串is.na(df$ParentName)匹配NA类型的空值|是向量版的“或”,能对每一行的ParentName做判断
方法二:用dplyr包(更简洁直观)
如果习惯用tidyverse工具链,dplyr的filter语法更易懂:
library(dplyr) # 写法1:逐个条件罗列 mydata <- df %>% filter(ParentName == "South East region" | is.na(ParentName) | ParentName == "") # 写法2:用%in%简化重复判断 mydata <- df %>% filter(ParentName %in% c("South East region", "") | is.na(ParentName))
小提示
可以先跑一行代码看看ParentName列的实际取值分布,确认空值类型:
table(df$ParentName, useNA = "always")
如果输出里没有"",说明只有NA类型的空值,那去掉ParentName == ""的条件就行。
内容的提问来源于stack exchange,提问作者JamesW
相关产品推荐
相关产品推荐

