【问题标题】:Sum rows by group with condition in R在R中按条件对行求和
【发布时间】:2021-10-07 17:38:03
【问题描述】:

我在 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()

【问题讨论】:

    标签: r dplyr data-management


    【解决方案1】:

    没有那么整洁,但仍然:

    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
    

    【讨论】:

      【解决方案2】:

      按“ID”分组后,将“A”乘以“B”(B中的0值返回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))
      

      【讨论】:

        猜你喜欢
        • 2020-11-26
        • 2021-09-16
        • 2023-01-16
        • 1970-01-01
        • 2022-10-06
        • 1970-01-01
        • 2021-06-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多