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

如何用循环统计数据框中阈值以上观测数?代码返回NA求解

问题原因与解决方案

你的代码返回NA是因为数据框S1的列中存在NA值,sum()函数默认遇到NA时会直接返回NA,不会自动忽略这些缺失值。

修改后的循环代码

只需要在sum()里添加na.rm = TRUE参数,就能跳过NA值统计有效数据:

ncols <- length(S1)
compliance <- setNames(numeric(ncol(S1)), names(S1))
for (i in 1:ncols) {
    i1 <- S1[[i]] > 50
    compliance[i] <- sum(i1, na.rm = TRUE)
}

更简洁的R风格写法

没必要用循环,base R的sapply一行就能搞定:

compliance <- sapply(S1, function(x) sum(x > 50, na.rm = TRUE))

如果习惯用tidyverse工具链,用dplyr可以这样写:

library(dplyr)
# 返回数据框格式
compliance_df <- S1 %>% summarise(across(everything(), ~sum(.x > 50, na.rm = TRUE)))
# 转成带列名的向量
compliance_vec <- as.numeric(compliance_df)
names(compliance_vec) <- names(compliance_df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 10:50:53