我的数据如下:
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关联的行业的频率最大值,如同1004我根据基于R中其他数据集df2的HH_ID成员的年龄选择HH_ID的行业。我已经尝试了data.table包但没有工作。请帮忙
答案 0 :(得分:0)
这是一个data.table解决方案,仅取决于Array
(
[0] => Array
(
[null] => Array
(
[11:04] => Array
(
[id] => 22
)
)
)
[1] => Array
(
[11:04] => Array
(
[id] => 22
)
)
)
Array
(
[6] => Array
(
[1] => Array
(
[2] => Array
(
[11:04] => Array
(
[id] => 22
)
)
)
[3] =>
)
)
(定义为data.table,名为df2
),即不需要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
答案 1 :(得分:0)
因为它标有dplyr
,我们可以使用dplyr
方法。使用第二个数据集(' df2'),我们按' HH_ID'和' INDUSTRY'来获取频率(' n()&# 39;)和最大'年龄',使用arrange
根据变量' FREQUENCY',' MAXAGE'进行排序,按' HH_ID&分组#39;,得到最后一个观察结果。
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