【问题标题】:Using mutate, if_else, and rowSums to create a new var based on condition使用 mutate、if_else 和 rowSums 根据条件创建新 var
【发布时间】:2021-08-30 00:30:09
【问题描述】:

我有一个长格式的数据框。我有多个城市。每个城市都有每个月的信息以及每个代码的信息(此代码从 100 到 1,000)。我的数据框如下所示:

Code City month Data
100 A 10 0
100 B 12 1
100 A 10 2
100 B 12 3
100 A 10 4
100 B 12 5
200 A 10 10
200 B 12 11
200 A 10 12
200 B 12 13
200 A 10 14
200 B 12 15

我正在尝试创建一个新的 var,当变量 Code 等于 100 时,每个月将 Data 变量中的信息相加。所以对于第 10 个月月我的结果是 6,第 12 个月我的结果是 9:

Code
6
9
6
9
6
9
6
9
6
9
6
9

为此,我正在使用 dplyr

df <- df %>%
group_by(month) %>% 
mutate(newvar =case_when(Code==100 ~ as.integer(rowSums(select_(., "Data"), na.rm = TRUE))))       

但是,我遇到了一个错误,我无法正确创建这个新变量。我知道更简单的方法是使用 base R。但我想使用 dplyr

任何帮助都非常感谢!

【问题讨论】:

    标签: r dplyr case-when rowsum if-case


    【解决方案1】:

    您只能在 Code = 100 对应每个 month 的情况下使用 sum Data 值。

    library(dplyr)
    
    df %>%
      group_by(month) %>%
      mutate(newvar = sum(Data[Code == 100], na.rm = TRUE)) %>%
      ungroup
    

    【讨论】:

      【解决方案2】:

      我们也可以

      library(dplyr)
      df %>%
         group_by(month) %>%
         mutate(newvar = sum(case_when(Code == 100 ~ Data), na.rm = TRUE))
      

      【讨论】:

        猜你喜欢
        • 2018-03-06
        • 1970-01-01
        • 2017-08-12
        • 1970-01-01
        • 1970-01-01
        • 2020-09-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多