使用 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
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))
我有一个长格式的数据框。我有多个城市。每个城市都有每个月的信息和每个代码的信息(此代码从 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
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))