如何用循环统计数据框中阈值以上观测数?代码返回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
相关产品推荐
相关产品推荐

