#r
#r
Вопрос:
У меня есть такой набор данных:
df1 <- structure(list(year = c(2013L, 2013L, 2013L, 2013L, 2013L, 2013L, 2017L, 2017L, 2017L, 2017L, 2017L, 2017L),
county = c("A", "A", "A", "B", "B", "B", "A", "A", "A", "B", "B", "B"),
party = c("P1", "P1", "P1", "P1", "P1", "P1","P1", "P1", "P1", "P1", "P1", "P1"),
list_position = c("2", "3", "1", "3", "2", "1", "2", "3", "1", "3", "2", "1"),
elected = c("1", "0", "1", "0", "0", "1", "1", "0", "1", "0", "1", "1")),
class = "data.frame", row.names = c(NA, -12L))
df1
year county party list_position elected
1 2013 A P1 2 1
2 2013 A P1 3 0
3 2013 A P1 1 1
4 2013 B P1 3 0
5 2013 B P1 2 0
6 2013 B P1 1 1
7 2017 A P1 2 1
8 2017 A P1 3 0
9 2017 A P1 1 1
10 2017 B P1 3 0
11 2017 B P1 2 1
12 2017 B P1 1 1
где list_position
содержит информацию о том, какую позицию в избирательном списке занимает кандидат от политической party
(данные содержат несколько партий, а не только P1
) в заданном year
и county
. Теперь мне нужна новая переменная, содержащая информацию о максимальном значении list_position
, при котором был избран кандидат. Это будет выглядеть следующим образом:
year county party list_position elected max_list_position
1 2013 A P1 2 1 2
2 2013 A P1 3 0 2
3 2013 A P1 1 1 2
4 2013 B P1 3 0 1
5 2013 B P1 2 0 1
6 2013 B P1 1 1 1
7 2017 A P1 2 1 2
8 2017 A P1 3 0 2
9 2017 A P1 1 1 2
10 2017 B P1 3 0 3
11 2017 B P1 2 1 3
12 2017 B P1 1 1 3
Я пытался
df1 <- df1 %>%
group_by(year, county, party) %>%
mutate(max_list_position= max(list_position [elected == 1])) %>%
ungroup()
но по какой-то причине R дает мне -Inf
значения для некоторых наблюдений для max_list_position
Комментарии:
1. Имеют ли комбинации year-county-party с
-Inf
хотя бы одну строку сelected==1
?2. нет … это проблема?
Ответ №1:
Работает ли это:
library(dplyr)
df1 %>% type.convert(as.is = T) %>% group_by(year, county) %>%
mutate(max_list_position = max(list_position[elected==1])[1])
# A tibble: 12 x 6
# Groups: year, county [4]
year county party list_position elected max_list_position
<int> <chr> <chr> <int> <int> <int>
1 2013 A P1 2 1 2
2 2013 A P1 3 0 2
3 2013 A P1 1 1 2
4 2013 B P1 3 0 1
5 2013 B P1 2 0 1
6 2013 B P1 1 1 1
7 2017 A P1 2 1 2
8 2017 A P1 3 0 2
9 2017 A P1 1 1 2
10 2017 B P1 3 0 2
11 2017 B P1 2 1 2
12 2017 B P1 1 1 2
>
Комментарии:
1. нет, к сожалению, все еще есть наблюдения с -Inf
2. @nick_dataFE, если у вас нет избранных кандидатов, каким вы хотите, чтобы результат в новом столбце был? Кроме того, можете ли вы включить такие случаи в свои те же данные?
Ответ №2:
Я не заметил, что у меня действительно есть наблюдения, по которым не был избран ни один кандидат в округах. Это вызвало проблему