首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单元格值满足R中条件的所有行之和

单元格值满足R中条件的所有行之和
EN

Stack Overflow用户
提问于 2022-07-06 17:29:56
回答 4查看 79关注 0票数 3

我有一个数据框架,例如:

代码语言:javascript
复制
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值,以生成如下数据帧:

代码语言:javascript
复制
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

我已经走了这么远:

代码语言:javascript
复制
df_test <- df %>%
summarise_at(vars(contains("col")), sum, na.rm = TRUE)
df_test
  col1 col2 col3
1 2504   34  103

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2022-07-06 17:39:51

summariseacross的结合

代码语言:javascript
复制
library(dplyr)
df %>%
  summarise(across(everything(),  ~ sum(.x[.x > 1], na.rm = TRUE)))
  col1 col2 col3
1 2500   34  103

或者在base RcolSums中,在对小于2到NA的元素进行replace之后

代码语言:javascript
复制
colSums(replace(df, df < 2, NA),  na.rm = TRUE)
col1 col2 col3 
2500   34  103 
票数 3
EN

Stack Overflow用户

发布于 2022-07-06 17:36:21

在设置map_dbl语句中的每个1到0之后,我们可以使用ifelse

代码语言:javascript
复制
library(purrr)
library(dplyr)

df %>% 
  mutate(across(, ~ifelse(. == 1, 0, .))) %>% 
  map_dbl(~ sum(.x, na.rm = TRUE))

或者没有purrr

代码语言:javascript
复制
library(dplyr)

df %>% 
  mutate(across(, ~ifelse(. == 1, 0, .))) %>% 
  summarise(across(, ~sum(., na.rm = TRUE)))
代码语言:javascript
复制
col1 col2 col3 
2500   34  103 
票数 1
EN

Stack Overflow用户

发布于 2022-07-06 17:38:34

使用sapply函数,您可以如下所示解决问题:

代码语言:javascript
复制
sapply(df, function(x) sum(x[x>1], na.rm=TRUE))

col1 col2 col3 
2500   34  103

或者使用summarise函数

代码语言:javascript
复制
df |> 
  summarise(across(, ~ sum(.[.>1], na.rm=TRUE)))
  col1 col2 col3
1 2500   34  103
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72887703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档