首页 > 解决方案 > 删除选择列中缺少数据的行,前提是它们在所有列中都没有缺失数据(最好使用 complete.cases)

问题描述

所以我试图删除在某些列中缺少数据的行,但不是那些在所有列中都缺少数据的行。

使用rowSums并排!is.na()在我的数据集底部给了我 1000 行 NA。这里的最佳答案提供了一种使用 complete.cases 解决我的问题的好方法:

删除 data.frame 中具有全部或部分 NA(缺失值)的行

IE

data_set1 <- data_set1[complete.cases(data_set1[11:103]), ]

但是,这只允许我删除指定列中缺少任何数据的行。我正在努力让 complete.cases 与 rowSums 一起玩,并阻止它删除所有缺失数据的行。

非常感谢任何建议!

标签: rna

解决方案


尝试使用rowSums类似:

cols <- 11:103
vals <- rowSums(is.na(data_set1[cols]))
data_set2 <- data_set1[!(vals > 0 & vals < length(cols)), ]

complete.casesrowSums

data_set1[complete.cases(data_set1[cols]) | 
         rowSums(is.na(data_set1[cols])) == length(cols) , ]

用可重现的例子,

df <- data.frame(a = c(1, 2, 3, NA, 1), b = c(NA, 2, 3, NA, NA), c = 1:5)
cols <- 1:2

vals <- rowSums(is.na(df[cols]))
df[!(vals > 0 & vals < length(cols)), ]

#   a  b c
#2  2  2 2
#3  3  3 3
#4 NA NA 4

推荐阅读