我有一个数据框,例如:
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
的变体,但都没有成功。到目前为止,我只找到了跨列条件求和和添加新列的示例。
最佳答案
使用 summarise
和 across
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/