Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
条件和分组变异dplyr_R_Dplyr - Fatal编程技术网

条件和分组变异dplyr

条件和分组变异dplyr,r,dplyr,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。结果将是 >soc

假设我有以下每个抽屉袜子增加的数据

>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
袜子 丁腈橡胶增长 1 0 2 1 3 0
我一直在比较一年的
sock_total
和另一年的
sock_total
。我知道我需要使用
dplyr::summaries()
,但我很难理解该函数中的内容。

如果您将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
socks%>%
分组人(开票人编号)%>%
总结(增长率=+(库存总量[年度==1991]-库存总量[年度==1990]>0))
#一个tibble:3x2
#丁腈橡胶增长
#         
#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))

你只处理两年的数据吗?@Alex P是的,最多只有两年。这里有另一个选项
socks%%>%arrange(drawer\u nbr,year)%%>%group\u by(drawer\u nbr)%%>%summary(growth=+(diff(sock\u total)>0))
这个
+
是用来做什么的?这是一个将布尔值转换为数值的简写,使用
TRUE
转换为1,
FALSE
为0。您可以在
groupby
之后添加一个筛选器,以筛选出没有两个年份数据的组<代码>袜子%>%分组依据(抽屉编号)%>%过滤器(全部(c(1990,1991)%年中)%>%总结(增长=+(袜子总数[年==1991]-袜子总数[年==1990]>0))