You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改which与rowSums代码以筛选含NA且符合条件的数据行

解决R中含NA数据的行筛选问题:保留至少3列数值≥5的行

你的问题出在rowSums处理NA值的默认行为上——默认情况下,只要行内存在NA,rowSums就会返回NA,导致这些行被which直接排除。要实现需求,只需在rowSums中添加na.rm = TRUE参数,让它忽略NA值,仅统计非NA且满足≥5的列数。

修改后的代码

# 构建数据框
A <- c(2,4,6,23,8,3)
B <- c(NA,NA,34,5,6,NA)
C <- c(37,21,8, NA, 5,2)
D <- c(12, 67, 12, 4, 11,NA)
E <- c(11, 56, 66, 90, 2,23)
df <- data.frame(A,B,C,D,E)

# 筛选至少3列数值≥5的行(忽略NA)
df[rowSums(df[, 1:5] >= 5, na.rm = TRUE) >= 3, ]

运行结果

A  B  C  D  E
1  2 NA 37 12 11
2  4 NA 21 67 56
3  6 34  8 12 66
4 23  5 NA  4 90
5  8  6  5 11  2

原理说明

  • df[, 1:5] >= 5生成逻辑矩阵,满足条件的位置为TRUE,不满足或为NA的位置为FALSE/NA
  • rowSums(..., na.rm = TRUE)会统计每行中TRUE的数量(即满足≥5的列数),同时忽略NA值,避免整行求和结果变为NA
  • 最后通过>=3筛选符合条件的行,无需额外使用which(逻辑向量可直接用于行索引,且我们已通过na.rm避免了NA的产生)

内容的提问来源于stack exchange,提问作者Adamm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 11:35:13