R语言筛选titanic数据集Embarked列空值行报错解决
报错诱因
R中data.frame使用方括号取子集的语法规则为数据框[行筛选条件, 列筛选条件],必须用英文逗号分隔行、列两个维度的筛选规则:逗号前的参数控制保留哪些行,逗号后的参数控制保留哪些列,任意位置留空代表对应维度不做筛选、全部保留。
你写的titanic[titanic$Embarked==""]没有添加分隔用的逗号,R会默认你传入的逻辑向量是列筛选规则,但titanic$Embarked==""返回的逻辑向量长度和数据集总行数一致(共891个布尔值),和数据集的总列数不匹配,无法匹配到对应列,因此触发「undefined columns selected」报错。
额外需要注意:从你贴的列取值统计结果看,Embarked列的2个空值是空字符串"",不是R中的标准缺失值NA,不要用is.na()函数做筛选,否则无法匹配到这两行。
正确筛选方式
- 基础R原生写法,逗号后留空代表保留所有列:
titanic[titanic$Embarked == "", ]
如果Embarked是因子类型,担心空值被存为因子水平导致判断失效,可以先转为字符向量再判断,兼容性更好:
titanic[as.character(titanic$Embarked) == "", ]
- 如果使用dplyr包做数据处理,不需要记忆方括号逗号位置规则,写法更直观:
library(dplyr) titanic %>% filter(Embarked == "")
内容的提问来源于stack exchange,提问作者Jonathan Zimmermann
相关产品推荐
相关产品推荐

