我正在尝试消除数据集中具有可变收入值0或NA的行。通过运行下面的两行代码,我发现有1039个具有我要寻找的特征的观察值。特别是,即使我只要求收入等于0,r也会自动考虑NA值。
length(allregions$income[allregions$emp == 1 & allregions$income == 0])
allregions$income[allregions$emp == 1 & allregions$income == 0]
但是,当我尝试消除这些行时,r仅删除收入等于0的行,而保留那些NA的行。即使我在条件中添加NA,这些值仍保留在我的数据集中。
allregions <- allregions[!(allregions$income == 0 & allregions$emp == 1),]
如何在特定列中删除带有NA的行?另外,即使我应用相同的条件,在一种情况下R也会考虑NA,而在另一种情况下却没有考虑NA,怎么可能呢?
谢谢您的帮助!
您可以这样使用%in%
:
result <- allregions[!(allregions$income %in% c(0, NA)), ]
或使用is.na()
测试NA
result <- allregions[allregions$income != 0 & !is.na(allregions$income), ]
要了解为什么 R的行为类似,我建议以下常见问题解答:Logical operators (AND, OR) with NA, TRUE and FALSE,Dealing with TRUE, FALSE, NA and NaN
Tidyverse是完成此类任务的理想选择:
library(tidyverse)
result <- allregions %>%
filter(!is.na(income) & income !=0)
result <- allregions %>%
filter(!income %in% c(0, NA))