r - 如果 dplyr 中按名称引用的某些变量不适用,则删除数据框行

标签 r dataframe filter dplyr

如果数据框中的所有行都具有所有 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/

相关文章:

r - 所有标点符号周围都留有空格,但撇号除外

python - 拆分数字和单词 pandas 保留索引

Python:将嵌套字典列出到 pandas DataFrame 问题

R - 如何创建堆叠器整体?

r - 如何使用 dplyr 将行转换为列

r - 提取元素名称相似的嵌套列表元素

python - Pandas DataFrame 的多个列表

java - mapToLong 不起作用后过滤非空

angularjs - 测试 Controller 功能中使用的过滤器

r - 如何从一个 data.table 中删除另一个 data.table 中指定的组组合 [R]