此代码删除包含至少一个NA的所有列。
library(dplyr)
df %>%
select_if(~ !any(is.na(.)))
如果我只想删除第八行包含NA的列(对于下面生成的数据),我需要修改什么?
set.seed(1234)
df <- data.frame(A = 1:10, B = 11:20, C = 21:30)
df <- as.data.frame(lapply(df, function(cc) cc[ sample(c(TRUE, NA), prob = c(0.85, 0.15), size = length(cc), replace = TRUE) ]))
答案 0 :(得分:4)
在base-R
中,您可以简单地尝试:
df[,which(!is.na(df[8,]))]
或@RichScriven
建议:
df[, !is.na(df[8,])]
# A B
# 1 1 11
# 2 2 12
# 3 3 13
# 4 4 NA
# 5 NA 15
# 6 6 16
# 7 7 17
# 8 8 18
# 9 9 19
# 10 10 20
答案 1 :(得分:3)
你可以这样做:
df %>%
select_if(!is.na(.[8,]))
A B
1 1 11
2 2 12
3 3 13
4 4 NA
5 NA 15
6 6 16
7 7 17
8 8 18
9 9 19
10 10 20
答案 2 :(得分:3)
另一个选项是keep
library(purrr)
keep(df, ~ !(is.na(.x[8])))
# A B
#1 1 11
#2 2 12
#3 3 13
#4 4 NA
#5 NA 15
#6 6 16
#7 7 17
#8 8 18
#9 9 19
#10 10 20
或Filter
base R
Filter(function(x) !(is.na(x[8])), df)