首页 > 解决方案 > 使用 mutate、if_else 和 rowSums 根据条件创建新 var

问题描述

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

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

我正在尝试创建一个新的 var,当变量Code等于 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

任何帮助都非常感谢!

标签: rdplyrcase-whenrowsumif-case

解决方案


您只能sumDatawhereCode = 100为 each设置值month

library(dplyr)

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

推荐阅读