【发布时间】:2021-05-18 17:30:36
【问题描述】:
我为篇幅道歉,但为了不跳过细节并使这比现在更混乱,这是必要的。
下面是样本数据和我目前所做的一些操作。
library(dplyr)
library(tidyverse)
emp <- c(1,2,3,4,5,6,7,8,1,12,54,101,33,159,201,261,110,195,131,228)
small <- c(1,1,1,1,1,1,1,1,1,1,1,2,1,3,3,4,2,3,2,3)
area <-c(003,003,003,003,003,003,003,003,003,003,003,003,003,003,003,003,003,003,003,003)
twodigit <-c(11,22,11,22,23,22,11,31,44,45,21,44,45,62,72,22,45,72,45,21)
smbtest2 <- data.frame(emp,small,area,twodigit)
因此,在我走得太远之前,目标是将就业 (emp) 按小数(下图)求和,然后将其分解为两位数(行业代码)。在这个简单的例子中,我想要每个小类别的前 3 个行业。我正在尝试 cumsum,因为如果一个属于第一类(0 到 99),那么它将属于第二类(0 到 149)。
smbsummary3<-smbtest2 %>%
group_by(area,small,twodigit) %>%
summarise(emp = sum(emp), worksites = n(),
.groups = 'drop_last')%>%
slice_max(emp,n=3)
smbsummary4<-smbsummary3 %>%
ungroup %>%
complete(area, small = unique(small)) %>%
fill(emp, worksites)
Schema for small
1 0 to 99
2 0 to 149
3 0 to 249
4 0 to 499
想要的结果
area small twodigit emp worksites
003 1 21 54 1
003 1 45 45 2 (12+33)
003 1 22 12 3 (2+4+6)
003 2 45 286 4 (12+33+110+131)
003 2 44 102 2 (1+101)
003 2 21 54 1
目前,它是纯粹基于small来求和的,这是它应该基于代码做的。但是,我的问题是如何根据小类别将其变为cumsum(累积和)?
以下是我最近的尝试。它没有加起来就是正确的答案,但我认为它接近正确的命令集。
smbsummary3<-smbtest2 %>%
group_by(area,small,twodigit) %>%
summarise(emp = sum(emp), worksites = n(),
.groups = 'drop_last')%>%
mutate(emp = cumsum(emp),
worksites = cumsum(worksites))%>%
slice_max(emp,n=3)
【问题讨论】: