我的数据如下:
HH_ID INDUSTRY FREQUENCY
1002 NURSE 2
1002 DOCTOR 1
1003 NOT APPLICABLE 3
1004 ENGINEER 1
1004 CLERK 1
1004 NURSE 1在一个数据集df1和另一个数据集中,它看起来如下所示
HH_ID INDUSTRY AGE
1002 NURSE 26
1002 NURSE 25
1002 DOCTOR 34
1003 NOT APPLICABLE 40
1003 NOT APPLICABLE 28
1003 NOT APPLICABLE 23
1004 ENGINEER 35
1004 CLERK 40
1004 NURSE 24另一个具有年龄的数据集称为df2,我想要一个如下所示的数据集:
HH_ID INDUSTRY FREQUENCY
1002 NURSE 2
1003 NOT APPLICABLE 3
1004 CLERK 1换句话说,我想创建另一个数据集df3,它给出了每个HH_ID的最大工业频率,如果这是不可能的,因为频率没有最大值--任何与HH_ID相关的行业--比如1004I--根据HH_ID成员的年龄,根据R.中的其他数据集df2来选择HH_ID行业,我尝试了data.table包,但没有成功。请帮帮忙
发布于 2016-06-23 04:59:38
由于它是用dplyr标记的,所以我们可以使用dplyr方法。使用第二个数据集('df2'),我们按'HH_ID‘和’工业‘进行分组,得到频率('n()')和最大’年龄‘,使用arrange根据变量’频率‘、'MAXAGE’(按'HH_ID‘分组)排序,得到最后的观察结果。
library(dplyr)
df2 %>%
group_by(HH_ID, INDUSTRY) %>%
mutate(FREQUENCY = n(),
MAXAGE = max(AGE)) %>%
arrange(FREQUENCY, MAXAGE) %>%
group_by(HH_ID) %>%
slice(n()) %>%
select(-AGE)
# HH_ID INDUSTRY FREQUENCY MAXAGE
# <int> <chr> <int> <int>
#1 1002 NURSE 2 26
#2 1003 NOT APPLICABLE 3 40
#3 1004 CLERK 1 40发布于 2016-06-23 03:48:52
这里有一个data.table解决方案,它只依赖于df2 (定义为data.table,命名为dt2),即不需要df1
dt2[,.SD[,.(FREQUENCY=.N,MAXAGE=max(AGE)),INDUSTRY][order(FREQUENCY,MAXAGE,decreasing=T)[1L]],HH_ID];
## HH_ID INDUSTRY FREQUENCY MAXAGE
## 1: 1002 NURSE 2 26
## 2: 1003 NOT APPLICABLE 3 40
## 3: 1004 CLERK 1 40如果需要,可以在以后删除MAXAGE列。
数据
dt2 <- data.table(HH_ID=c(1002L,1002L,1002L,1003L,1003L,1003L,1004L,1004L,1004L),INDUSTRY=c(
'NURSE','NURSE','DOCTOR','NOT APPLICABLE','NOT APPLICABLE','NOT APPLICABLE','ENGINEER',
'CLERK','NURSE'),AGE=c(26L,25L,34L,40L,28L,23L,35L,40L,24L));https://stackoverflow.com/questions/37981722
复制相似问题