如何根据r中另一列中的值删除重复值

时间:2016-06-23 03:15:56

标签: r dplyr

我的数据如下:

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包但没有工作。请帮忙

2 个答案:

答案 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