从R中的数据框中删除行时出现NA值问题

时间:2016-03-03 13:02:20

标签: r dataframe

这是我的数据框:

ID <- c('TZ1','TZ2','TZ3','TZ4')
hr <- c(56,32,38,NA)
cr <- c(1,4,5,2)
data <- data.frame(ID,hr,cr)

   ID hr cr
1 TZ1 56  1
2 TZ2 32  4
3 TZ3 38  5
4 TZ4 NA  2

我想删除数据$ hr = 56的行。这就是我想要的最终产品:

   ID hr cr
2 TZ2 32  4
3 TZ3 38  5
4 TZ4 NA  2

这是我认为可行的:

data = data[data$hr !=56,]

但结果数据框如下所示:

     ID hr cr
2   TZ2 32  4
3   TZ3 38  5
NA <NA> NA NA

如何将我的代码mofify以包含NA值,这样就不会发生?谢谢你的帮助,我无法弄清楚。

编辑:我还想在数据框中保留NA值。

1 个答案:

答案 0 :(得分:1)

问题在于,当我们执行==!=时,如果存在NA值,它将保持原样并为该对应的NA值创建NA行。因此,只使用TRUE / FALSE值创建逻辑索引的一种方法是在比较中也使用is.na

 data[!(data$hr==56 & !is.na(data$hr)),]
 #   ID hr cr
 #2 TZ2 32  4
 #3 TZ3 38  5
 #4 TZ4 NA  2

我们也可以应用反向逻辑

subset(data, hr!=56|is.na(hr))
#   ID hr cr
#2 TZ2 32  4
#3 TZ3 38  5
#4 TZ4 NA  2