对其他列 R 的条件划分
Conditional division on other columns R
我正在尝试在下面的数据框中创建 3 个额外的列,这些列计算一个候选人相对于另一个候选人的百分比胜利幅度、候选人的投票份额和一个虚拟变量 1/0 表示胜利与否,所有每个部分每个州的城市。
我的数据框:
State City Vote Section Candidat
MA A 53 1 Joe
MA A 39 1 Tom
MA A 26 2 Tom
MA A 29 2 Joe
MA B 12 1 Tim
MA B 10 1 Ben
MA B 16 2 Tim
MA B 13 2 Ben
CH C 88 1 Liz
CH C 65 1 Alex
CH C 71 1 Aziz
CH C 23 2 Aziz
CH C 30 2 Alex
CH C 19 2 Liz
所需的数据帧
State City Vote Section Candidat Margin Share Elect
MA A 53 1 Joe 0.36 0.58 1
MA A 39 1 Tom -0.36 0.42 0
MA A 26 2 Tom -0.10 0.47 0
MA A 29 2 Joe 0.10 0.53 1
MA B 12 1 Tim 0.20 0.55 1
MA B 10 1 Ben -0.20 0.45 0
MA B 16 2 Tim 0.23 0.55 1
MA B 13 2 Ben -0.23 0.45 0
CH C 88 1 Liz 0.35 0.58 1
CH C 65 1 Alex -0.35 0.42 0
CH C 71 1 Aziz 2.09 0.76 1
CH C 23 2 Aziz -2.09 0.24 0
CH C 30 2 Alex 0.58 0.61 1
CH C 19 2 Liz -0.58 0.39 0
你可以使用
library(dplyr)
df %>%
group_by(State, City, Section) %>%
mutate(
Margin = ifelse(Vote == max(Vote), max(Vote) / min(Vote) - 1, 1 - max(Vote) / min(Vote)),
Share = Vote / sum(Vote),
Elect = +(Vote == max(Vote))
) %>%
ungroup()
这个returns
# A tibble: 14 x 8
State City Vote Section Candidat Margin Share Elect
<chr> <chr> <dbl> <dbl> <chr> <dbl> <dbl> <int>
1 MA A 53 1 Joe 0.359 0.576 1
2 MA A 39 1 Tom -0.359 0.424 0
3 MA A 26 2 Tom -0.115 0.473 0
4 MA A 29 2 Joe 0.115 0.527 1
5 MA B 12 1 Tim 0.2 0.545 1
6 MA B 10 1 Ben -0.2 0.455 0
7 MA B 16 2 Tim 0.231 0.552 1
8 MA B 13 2 Ben -0.231 0.448 0
9 CH C 88 1 Liz 0.354 0.393 1
10 CH C 65 1 Alex -0.354 0.290 0
11 CH C 71 1 Aziz -0.354 0.317 0
12 CH C 23 2 Aziz -0.579 0.319 0
13 CH C 30 2 Alex 0.579 0.417 1
14 CH C 19 2 Liz -0.579 0.264 0
我正在尝试在下面的数据框中创建 3 个额外的列,这些列计算一个候选人相对于另一个候选人的百分比胜利幅度、候选人的投票份额和一个虚拟变量 1/0 表示胜利与否,所有每个部分每个州的城市。
我的数据框:
State City Vote Section Candidat
MA A 53 1 Joe
MA A 39 1 Tom
MA A 26 2 Tom
MA A 29 2 Joe
MA B 12 1 Tim
MA B 10 1 Ben
MA B 16 2 Tim
MA B 13 2 Ben
CH C 88 1 Liz
CH C 65 1 Alex
CH C 71 1 Aziz
CH C 23 2 Aziz
CH C 30 2 Alex
CH C 19 2 Liz
所需的数据帧
State City Vote Section Candidat Margin Share Elect
MA A 53 1 Joe 0.36 0.58 1
MA A 39 1 Tom -0.36 0.42 0
MA A 26 2 Tom -0.10 0.47 0
MA A 29 2 Joe 0.10 0.53 1
MA B 12 1 Tim 0.20 0.55 1
MA B 10 1 Ben -0.20 0.45 0
MA B 16 2 Tim 0.23 0.55 1
MA B 13 2 Ben -0.23 0.45 0
CH C 88 1 Liz 0.35 0.58 1
CH C 65 1 Alex -0.35 0.42 0
CH C 71 1 Aziz 2.09 0.76 1
CH C 23 2 Aziz -2.09 0.24 0
CH C 30 2 Alex 0.58 0.61 1
CH C 19 2 Liz -0.58 0.39 0
你可以使用
library(dplyr)
df %>%
group_by(State, City, Section) %>%
mutate(
Margin = ifelse(Vote == max(Vote), max(Vote) / min(Vote) - 1, 1 - max(Vote) / min(Vote)),
Share = Vote / sum(Vote),
Elect = +(Vote == max(Vote))
) %>%
ungroup()
这个returns
# A tibble: 14 x 8
State City Vote Section Candidat Margin Share Elect
<chr> <chr> <dbl> <dbl> <chr> <dbl> <dbl> <int>
1 MA A 53 1 Joe 0.359 0.576 1
2 MA A 39 1 Tom -0.359 0.424 0
3 MA A 26 2 Tom -0.115 0.473 0
4 MA A 29 2 Joe 0.115 0.527 1
5 MA B 12 1 Tim 0.2 0.545 1
6 MA B 10 1 Ben -0.2 0.455 0
7 MA B 16 2 Tim 0.231 0.552 1
8 MA B 13 2 Ben -0.231 0.448 0
9 CH C 88 1 Liz 0.354 0.393 1
10 CH C 65 1 Alex -0.354 0.290 0
11 CH C 71 1 Aziz -0.354 0.317 0
12 CH C 23 2 Aziz -0.579 0.319 0
13 CH C 30 2 Alex 0.579 0.417 1
14 CH C 19 2 Liz -0.579 0.264 0