条件和分组变异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))