在 R 中按条件对行求和

Sum rows by group with condition in R

我在 R 中有这样一个数据集:

并且我想通过添加一个列来保留相同的数据集,该列在 A=B=1 时按 ID 给出总和行。

这是所需的数据集:

我尝试了以下 R 代码,但它没有给出我想要的结果:

library(dplyr)

data1<-data%>% group_by(ID) %>% 
  mutate(result=case_when(A==1 & B==1 ~ sum(A),TRUE ~ 0)) %>% ungroup()

按 'ID' 分组后,将 'A' 乘以 'B'(B 中的 0 个值 returns A 中的 0 个值)然后得到 sum

library(dplyr)
data  %>%
     group_by(ID) %>%
     mutate(result = sum(A*B)) %>%
     ungroup

-输出

# A tibble: 10 × 4
      ID     A     B result
   <dbl> <dbl> <dbl>  <dbl>
 1     1     1     0      3
 2     1     1     1      3
 3     1     0     1      3
 4     1     0     0      3
 5     1     1     1      3
 6     1     1     1      3
 7     2     1     0      2
 8     2     1     1      2
 9     2     1     1      2
10     2     0     0      2

数据

data <- structure(list(ID = c(1, 1, 1, 1, 1, 1, 2, 2, 2, 2), A = c(1, 
1, 0, 0, 1, 1, 1, 1, 1, 0), B = c(0, 1, 1, 0, 1, 1, 0, 1, 1, 
0)), class = "data.frame", row.names = c(NA, -10L))

没有那么整洁,但仍然:

data %>%
  mutate(row_sum = apply(across(A:B), 1, sum)) %>%
  group_by(ID) %>%
  mutate(result = sum(row_sum == 2)) %>%
  ungroup() %>%
  select(-row_sum)

给出:

# A tibble: 10 x 4
      ID     A     B result
   <dbl> <dbl> <dbl>  <int>
 1     1     1     0      3
 2     1     1     1      3
 3     1     0     1      3
 4     1     0     0      3
 5     1     1     1      3
 6     1     1     1      3
 7     2     1     0      2
 8     2     1     1      2
 9     2     1     1      2
10     2     0     0      2