R语言如何对数据框各列大于1的单元格求和并忽略NA值
按列阈值条件求和实现方案
你现有代码的问题是未对列内元素做阈值过滤,直接对整列求和导致值为1的元素被计入结果,只需在求和逻辑中增加值>1的筛选即可,以下是可直接运行的实现代码:
dplyr 实现(推荐)
适配最新版dplyr的across语法,逻辑清晰易读:
library(dplyr) # 示例数据 df <- data.frame(col1 = c(1, 2500,1, 1, 1), col2 = c(12, NA, 8,9, 5), col3 = c(25, 48, 7, 9, 14)) # 按列求和:仅统计值>1的元素,自动忽略NA df_result <- df %>% summarise(across(contains("col"), ~sum(.x[.x > 1], na.rm = TRUE)))
运行输出结果和预期完全一致:
col1 col2 col3 1 2500 34 103
如果需要兼容旧版dplyr的summarise_at写法,替换为以下代码即可:
df_test <- df %>% summarise_at(vars(contains("col")), ~sum(.x[.x > 1], na.rm = TRUE))
base R 实现(无需加载第三方包)
不依赖tidyverse生态也可以快速实现:
df_result <- as.data.frame( lapply(df, function(col) sum(col[col > 1], na.rm = TRUE)) )
内容的提问来源于stack exchange,提问作者tmxkrdhqj
相关产品推荐
相关产品推荐

