r - 如果多列中的 NA 超过 25%,则删除行
问题描述
我想删除多列中包含超过 25% NA 的所有行。由于这涉及大约 120 个相应的列,因此不指定所有列会很方便。最好是类似:columnA 和 columnZ 之间的所有内容。
我尝试过使用:
data[!is.na(data$ColumnA:data$ColumnZ), > 0.25]
但它只显示了这个错误:
必须使用有效的下标向量对列进行子集化。
逻辑下标必须与索引输入的大小相匹配。
x 输入的大小为 250,但下标 !is.na(data$ColumnA:data$ColumnZ) > 0.25 的大小为 3。
(250 是数据集中的实际列数)
我也考虑过尝试 drop_na 但这会导致类似的问题。
你有什么建议吗?先感谢您
解决方案
您可以使用rowMeans(is.na(.)
数据:
set.seed(1)
df<-tibble(matrix(sample(c(1, NA), 64, replace=TRUE, prob = c(0.75, 0.25)), nrow=8))
# A tibble: 8 x 1
`matrix(...)`[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1 1 1 1 1 1 1 NA
2 1 1 1 1 NA 1 1 1
3 1 NA 1 1 1 1 1 NA
4 1 1 1 1 NA NA NA 1
5 1 1 1 1 NA NA 1 NA
6 1 1 NA 1 1 1 1 1
7 NA 1 1 1 1 1 NA 1
8 1 1 1 1 1 NA 1 1
筛选:
df%>%filter(rowMeans(is.na(.))<0.25)
# A tibble: 4 x 1
`matrix(...)`[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1 1 1 1 1 1 1 NA
2 1 1 1 1 NA 1 1 1
3 1 1 NA 1 1 1 1 1
4 1 1 1 1 1 NA 1 1
或使用 rowwise():
df%>%
rowwise()%>%
filter(mean(is.na(c_across(everything())))<0.25)
推荐阅读
- url - root-relative 和 protocol-relative url 路径有什么区别?
- excel - 在 VBA 中使用 IF
- node.js - res.cookie(名称,值);不设置 cookie (Express/NodeJs)
- keycloak - 通过 Standalone.sh 在与 localhost 不同的地址上启动 Keycloak 服务器
- r - 在绘图区域外添加文本
- java - 如何从文件java中的特定行更新特定字符串
- amazon-web-services - 如何在 CloudWatch 中查看 AWS CloudFormation 日志?
- reactjs - 如何处理 React 中已删除的本地存储?
- twilio - Twilio Studio Flow - 通话录音出错?
- c# - 1809 更新后 ContextFlyout 不工作