如果数据框中的所有行都具有所有 NA,但只有某些列子集(按顺序命名并以“X”开头),我想从数据框中删除整行。
这与我发现的其他答案不同,因为我无法按名称手动引用每一列(变量太多),并且不仅想在行完全不适用时删除它们(而不是如果行)有些变量完全不适用)。
所以转动样本数据:
data1 <- as.data.frame(rbind(c(1,2,3), c(1, NA, 4), c(4,6,7), c(1, NA, NA), c(4, 8, NA)))
colnames(data1) <- c("Z","X1","X2")
data1
Z X1 X2
1 1 2 3
2 1 NA 4
3 4 6 7
4 1 NA NA
5 4 8 NA
进入:
V1 V2 V3
1 1 2 3
2 1 NA 4
3 4 6 7
4 4 8 NA
即如果 X1 和 X2(所有 X 序列)均为 NA,则删除该行。
在这个例子中,为了方便起见,只有两个变量(X1:X2),但实际上我有接近 100 个这个序列以及许多其他重要变量,这些变量可能是 NA,也可能不是 NA。我更愿意在带有过滤器的 dplyr 中这样做,但其他解决方案也将受到赞赏。
我的感觉是:
data2 %>% filter(!is.na(all(X1:X2)))
或类似的东西很接近,但 R 不喜欢过滤器内对 X1:X2 的序列引用。
最佳答案
您可以使用rowSums + select +starts_with + filter
:
data1 %>%
filter(rowSums(!is.na(select(., starts_with("X")))) != 0)
# Z X1 X2
#1 1 2 3
#2 1 NA 4
#3 4 6 7
#4 4 8 NA
关于r - 如果 dplyr 中按名称引用的某些变量不适用,则删除数据框行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43880797/