条件和分组mutate dplyr

时间:2017-07-28 17:42:45

标签: r 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,否则为0。结果将是

>socks
drawer_nbr  growth
  <dbl>     <factor>
    1          0  
    2          1
    3          0

我很难比较一年的sock_total与另一年的sock_total。我知道我需要使用dplyr::summaries(),但我对该功能内部的内容有困难。

2 个答案:

答案 0 :(得分:4)

如果您将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

答案 1 :(得分:1)

您可以混合使用dplyrtidyr

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))