我有一个数据框:
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
我一直在努力解决这个问题。谢谢!
答案 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