首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据r中另一列中的值删除重复值

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

Stack Overflow用户
提问于 2016-06-23 03:15:56
回答 2查看 70关注 0票数 0

我的数据如下:

代码语言:javascript
复制
HH_ID   INDUSTRY       FREQUENCY
1002    NURSE           2
1002    DOCTOR          1
1003    NOT APPLICABLE  3
1004    ENGINEER        1
1004    CLERK           1
1004    NURSE           1

在一个数据集df1和另一个数据集中,它看起来如下所示

代码语言:javascript
复制
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,我想要一个如下所示的数据集:

代码语言:javascript
复制
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包,但没有成功。请帮帮忙

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-23 04:59:38

由于它是用dplyr标记的,所以我们可以使用dplyr方法。使用第二个数据集('df2'),我们按'HH_ID‘和’工业‘进行分组,得到频率('n()')和最大’年龄‘,使用arrange根据变量’频率‘、'MAXAGE’(按'HH_ID‘分组)排序,得到最后的观察结果。

代码语言:javascript
复制
 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
票数 0
EN

Stack Overflow用户

发布于 2016-06-23 03:48:52

这里有一个data.table解决方案,它只依赖于df2 (定义为data.table,命名为dt2),即不需要df1

代码语言:javascript
复制
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列。

数据

代码语言:javascript
复制
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));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37981722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档