Условный и групповой мутированный dplyr
Допустим, у меня есть следующие данные увеличения носка на ящик
>socks
year drawer_nbr sock_total
1990 1 2
1991 1 2
1990 2 3
1991 2 4
1990 3 2
1991 3 1
Я хотел бы иметь бинарную переменную, которая определяет, увеличились ли носки в каждом ящике. 1, если они увеличились, и 0, если нет. Результат будет
>socks
drawer_nbr growth
<dbl> <factor>
1 0
2 1
3 0
Я зацикливаюсь на сравнении sock_total
одного года против sock_total
другого года. Я знаю, что мне нужно использовать dplyr::summaries()
, но у меня есть трудности с тем, что входит в эту функцию.
2 ответа
Решение
Если вы сравниваете 1991 год с 1990 годом, вы можете сделать:
socks %>%
group_by(drawer_nbr) %>%
summarise(growth = +(sock_total[year == 1991] - sock_total[year == 1990] > 0))
# A tibble: 3 x 2
# drawer_nbr growth
# <int> <int>
#1 1 0
#2 2 1
#3 3 0
Вы могли бы использовать смесь dplyr
а также tidyr
:
library(tidyr)
library(dplyr)
socks %>%
group_by(drawer_nbr) %>%
spread(year, sock_total) %>%
mutate(growth = `1991` - `1990`)
Или, если вы хотите, чтобы рост был только двоичным:
socks %>%
group_by(drawer_nbr) %>%
spread(year, sock_total) %>%
mutate(growth = ifelse((`1991` - `1990`) > 0,
1, 0))