从数据帧中删除 NA,除了一列 R
Remove NAs from dataframe except in one column R
我有一个数据框:
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
我已经为此苦苦挣扎了一段时间。谢谢!
您可以在前三列上使用 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
一个library(dplyr)
方法:
data1 %>% filter(complete.cases(.[,-4]))
或
data1 %>% filter(complete.cases(.[,-3]))
如果您想在第 3 列中保留 NA
这是一个使用 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
我有一个数据框:
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
我已经为此苦苦挣扎了一段时间。谢谢!
您可以在前三列上使用 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
一个library(dplyr)
方法:
data1 %>% filter(complete.cases(.[,-4]))
或
data1 %>% filter(complete.cases(.[,-3]))
如果您想在第 3 列中保留 NA
这是一个使用 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