【发布时间】: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