从数据帧中删除NA,但在一列R中除外

时间:2016-06-01 21:38:18

标签: r na

我有一个数据框:

column1 <- c(400, 500, 350, 70, NA, NA, 500, 350, 70)
column2 <- c(NA, 67, 23, 45, 78, 123, 54, 123, 898)
column3 <- c(412, 4, 5, 6, 1, 689, 90, 12, NA)
column4 <- c("IMC", "VMC", NA, NA, NA, NA, "IMC", "VMC", "IMC")
data1 <- data.frame(column1, column2, column3, column4)

看起来像这样:

column1  column2  column3  column4
400      NA       412      IMC
500      67       4        VMC
350      23       5        NA
70       45       6        NA
NA       78       1        NA
NA       123      689      NA
500      54       90       IMC
350      123      12       VMC
70       898      NA       IMC

问题:是否可以从第1,2和3列删除NA的行,但不能从第4列删除?所以我的输出将如下所示:

column1  column2  column3  column4
500      67       4        VMC
350      23       5        NA
70       45       6        NA
500      54       90       IMC
350      123      12       VMC

我一直在努力解决这个问题。谢谢!

3 个答案:

答案 0 :(得分:2)

您可以在前三列上使用complete.cases(),然后执行subset

data1[complete.cases(data1[, 1:3]), ]
  column1 column2 column3 column4
2     500      67       4     VMC
3     350      23       5    <NA>
4      70      45       6    <NA>
7     500      54      90     IMC
8     350     123      12     VMC

答案 1 :(得分:2)

library(dplyr)方法:

data1 %>% filter(complete.cases(.[,-4]))

data1 %>% filter(complete.cases(.[,-3]))

如果您想将NA保留在第3列

答案 2 :(得分:1)

通过指定data.table

中的列,可以使用.SDcols选项
library(data.table)
setDT(data1)[data1[, complete.cases(.SD), .SDcols = column1:column3]]
#   column1 column2 column3 column4
#1:     500      67       4     VMC
#2:     350      23       5      NA
#3:      70      45       6      NA
#4:     500      54      90     IMC
#5:     350     123      12     VMC