r - 仅删除带有 NA 和/或零的列
问题描述
我有一个示例数据集,看起来类似于下面的数据集:
d= data.frame(a = c(1,5,56,4,9),
b = c(0,0,NA,0,NA),
c = c(98,67,NA,3,7),
d = c(0,0,0,0,0),
e = c(NA,NA,NA,NA,NA))
这将是:
| a | b | c | d | e |
|----|:--:|---:|---|----|
| 1 | 0 | 98 | 0 | NA |
| 5 | 0 | 67 | 0 | NA |
| 56 | NA | NA | 0 | NA |
| 4 | 0 | 3 | 0 | NA |
| 9 | NA | 7 | 0 | NA |
我需要删除所有具有以下内容的列:
1. NA's and Zeros
2. Only Zeros
3. Only NA's
因此,基于上述数据集,应删除 b、d 和 e 列。所以,我首先需要找出哪些列有这样的条件,然后删除它们。
我通过此链接删除了 colsums=0 的列,但我不清楚解决方案。此外,它没有为我提供所需的输出。
最终输出将是:
| a | c |
|----|:--:|
| 1 | 98 |
| 5 | 67 |
| 56 | NA |
| 4 | 3 |
| 9 | 7 |
解决方案
一种选择是根据每列中的元素colSums
数或 0 创建一个逻辑向量NA
d[!colSums(is.na(d)|d ==0) == nrow(d)]
# a c
#1 1 98
#2 5 67
#3 56 NA
#4 4 3
#5 9 7
或者另一种选择是replace
所有的 0 到NA
然后应用is.na
d[colSums(!is.na(replace(d, d == 0, NA))) > 0]
或更紧凑地na_if
d[colSums(!is.na(na_if(d, 0))) > 0]
推荐阅读
- android - 以编程方式在实时数据库中导入 JSON,而不是手动
- java - Spring数据JPA存储库中的解析和查询构建哪个类?
- rest - 表达“参数中未指定任何内容时全选”的正确方法是什么?
- ruby - Slack Events API - 只能订阅公共频道中发布的消息?
- flutter - 使用 firebase 的提供程序类时出现错误
- python - 如何在 Django 中获取 Ajax 发送的数据?
- python - Python 中的绝对/相对导入:ModuleNotFoundError 等
- android - 避免 EnumMap 中的 ConcurrentModificationException 以性能和安全为重点的方法
> - c# - 方法的 C# 条件运算符
- javascript - JS;简单数组中的最大路径和练习;结果无效