r - 对单元格值满足 R 条件的所有行求和

标签 r 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))
df
  col1 col2 col3
1    1   12   25
2 2500   NA   48
3    1    8    7
4    1    9    9
5    1    5   14

我希望仅在单元格值大于 1 时对行求和,同时忽略 NA 值,以制作这样的数据框:

df_desired <- data.frame(col1 = c(2500), 
                         col2 = sum(12, 8,9, 5), 
                         col3 = sum(25, 48, 7, 9, 14))
df_desired
  col1 col2 col3
1 2500   34  103

我已经走到这一步了:

df_test <- df %>%
summarise_at(vars(contains("col")), sum, na.rm = TRUE)
df_test
  col1 col2 col3
1 2504   34  103

我已经尝试了很多 ifelse 的变体,但都没有成功。到目前为止,我只找到了跨列条件求和和添加新列的示例。

最佳答案

使用 summariseacross

library(dplyr)
df %>%
  summarise(across(everything(),  ~ sum(.x[.x > 1], na.rm = TRUE)))
  col1 col2 col3
1 2500   34  103

或者在 base R 中使用 colSums 将小于 2 的元素替换NA

colSums(replace(df, df < 2, NA),  na.rm = TRUE)
col1 col2 col3 
2500   34  103 

关于r - 对单元格值满足 R 条件的所有行求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72887703/

相关文章:

r - 如何在R中绘制多条线

r - gsub 并删除 R 中 < 和 > 之间的所有字符

r - DPLYR 过滤多个组,每个组都有自己的标准

r - 按R中的多个条件排列

r - 将稀疏矩阵转换为完整矩阵 - R

r - 在 R 图的图例中绘制 "arrow"

r - Rcpp中的排序排列,即base::order()

r - dplyr::filter 中的多个 if_all() 不起作用

r - 在 R 数据框中创建 bool 列,如果另一列值逐行更改则返回 true

根据不同列中的值将多列中的值替换为 NA