【发布时间】:2020-11-28 04:52:30
【问题描述】:
我想在删除异常值后在我的数据集中包含 NA。例如,在下面的数据框中,我想删除 > 13 的异常值。我已按数据框进行子集化以创建没有异常值的新数据,但我的代码也删除了 NA。我曾尝试使用 na.rm= FALSE,但我只得到一个错误。
id <- c(3,3,6,6,4,4,3,3)
age_cat <- c(1,1,1,1,2,2,3,3,)
measurement <- c(10, 13, 14,13, NA, 11, NA, 17)
myData <- data.frame(id, age_cat, measurement)
myData
#If I use this the outliers are removed along with NAs
myData_no_ol <- subset(myData, myData$measurement < 13)
myData_no_ol
#If I use this I get an error
#Error: unexpected ',' in "myData_no_ol <- subset((myData,"
myData_no_ol <- subset((myData, myData$measurement < 13), na.rm= FALSE)
myData_no_ol
不知道哪里出错了。
谢谢! P
【问题讨论】:
-
您在
age_cat中有3,)。subset、filter删除逻辑向量中的NA。如果有任何NA,则返回NA进行比较。 -
myData_no_ol <- subset(myData, myData$measurement < 13 | is.na(myData$measurement))可以帮到你! -
当您逐行或通过获取整个文档来运行此代码时,您不应忽略错误或警告。在这种情况下,根据@akrun 的评论,您应该已经看到
Error in c(1, 1, 1, 1, 2, 2, 3, 3, ) : argument 9 is empty,这是一个明确的指示,表明某些事情只是错误,并且任何后续代码(或来自它的警告/错误)都值得怀疑最好的。 -
感谢您指出该错误。但是,即使在更正之后,我也会遇到同样的错误。我想知道使用 na.rm= FALSE 是否不正确,为什么它仍然会给我一个语法错误。话虽如此,@Duck 使用 is.na 的代码有效!