使用 mutate、if_else 和 rowSums 根据条件创建新的 var

Using mutate, if_else, and rowSums to create a new var based on condition

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

代码 城市 数据
100 一个 10 0
100 B 12 1
100 一个 10 2
100 B 12 3
100 一个 10 4
100 B 12 5
200 一个 10 10
200 B 12 11
200 一个 10 12
200 B 12 13
200 一个 10 14
200 B 12 15

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

代码
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.

非常感谢任何帮助!

您只能 sum DataCode = 100 每个 month

library(dplyr)

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

我们也可以

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