【问题标题】:Include NA after removing outliers去除异常值后包括 NA
【发布时间】: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,)subsetfilter 删除逻辑向量中的NA。如果有任何NA,则返回NA 进行比较。
  • myData_no_ol &lt;- subset(myData, myData$measurement &lt; 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 的代码有效!

标签: r na outliers


【解决方案1】:

您只需为 is.na() 添加一个子句。因为当询问是 NA 时,R 将返回 NA 而不是 T 或 F

myData_no_ol <- subset(myData, myData$measurement < 13 | is.na(myData$measurement))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-01
    • 2015-07-29
    • 2019-07-06
    • 1970-01-01
    • 2019-12-25
    • 2020-05-25
    • 2012-05-21
    相关资源
    最近更新 更多