问题描述
我有一个长格式的数据框。我有多个城市。每个城市都有每个月的信息和每个代码的信息(这个代码从 100 到 1,000)。我的数据框如下所示:
代码 | 城市 | 月 | 数据 |
---|---|---|---|
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 |
我正在尝试创建一个新的变量,当变量 Code 等于 100 时,它会将 Data 变量中的信息相加。所以对于第 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))))
但是,我收到一个错误,我无法正确创建这个新变量。我知道更简单的方法是使用基础 R。但我想使用 dplyr。
任何帮助都非常感谢!
解决方法
您只能在每个 sum
的 Data
处Code = 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))