【问题标题】:How to calculate the sum of rows in group only when the condition is met如何仅在满足条件时计算组中的行总和
【发布时间】:2023-02-14 17:49:31
【问题描述】:

我有一个类似于这样的数据框:

data.frame(Group1 = c("A", "A", "A", "A"),
           Group2 = c("X", "X", "X", "Y"),
           ValueA = c(20, 40, 50, 80),
           ValueB = c(0, 0, 70, 60))

我想计算 ValueA 组内 Group1Group2 的行总和,仅当 ValueB 中的值为 0 时。

我的预期输出是:

data.frame(Group1 = c("A", "A", "A", "A"),
           Group2 = c("X", "X", "X", "Y"),
           ValueA = c(20, 40, 50, 80),
           ValueB = c(0, 0, 70, 60),
           SumA_whenBis0 = c(60, 60, 60, 0))

【问题讨论】:

  • 当 B = 0 时,您想将 sumA 与什么相加

标签: r dplyr


【解决方案1】:
library(dplyr)
#> 
#> Attache Paket: 'dplyr'
#> Die folgenden Objekte sind maskiert von 'package:stats':
#> 
#>     filter, lag
#> Die folgenden Objekte sind maskiert von 'package:base':
#> 
#>     intersect, setdiff, setequal, union

df <-  data.frame(Group1 = c("A", "A", "A", "A"),
             Group2 = c("X", "X", "X", "Y"),
             ValueA = c(20, 40, 50, 80),
             ValueB = c(0, 0, 70, 60))


df %>% 
  group_by(Group1, Group2) %>% 
  mutate(SumA_whenBis0 = sum(ValueA[ValueB == 0]))
#> # A tibble: 4 x 5
#> # Groups:   Group1, Group2 [2]
#>   Group1 Group2 ValueA ValueB SumA_whenBis0
#>   <chr>  <chr>   <dbl>  <dbl>         <dbl>
#> 1 A      X          20      0            60
#> 2 A      X          40      0            60
#> 3 A      X          50     70            60
#> 4 A      Y          80     60             0

reprex package (v2.0.1) 创建于 2023-02-14

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-09
    • 1970-01-01
    • 2014-02-12
    • 1970-01-01
    • 2015-03-21
    • 2016-05-09
    • 2021-06-11
    • 2020-08-29
    相关资源
    最近更新 更多