首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除重复行

删除重复行
EN

Stack Overflow用户
提问于 2015-07-08 10:30:10
回答 1查看 165关注 0票数 1

here已经回答了这个问题,但无法使它工作。

这里有一个数据框架,有兴趣删除基于SYMBOL的重复行。检查列CALL以删除duplicates.The优先级是P>A>M.If P,A,M P,A,M P,如果是A,M,保持A,否则是M

代码语言:javascript
复制
      SYMBOL  INTENSITY  CALL
1     DDR1    596.95050    P
2     RFC2    420.28708    P
3     HSPA6   510.73254    P
4     DDR1   1717.99487    A
5     GUCA1A  121.53488    A
6     UBA7   1810.49780    P
7     UBA7    301.51944    M
8     GUCA1A   34.53987    A
9     CCL5   5966.24609    P
10    CYP2E1   95.15707    A
11    CYP2E1  164.95276    M
12    ESRRA  1024.88745    P
13    CYP2A6  502.48877    A
14    GAS6    921.70923    P
15    MMP14   524.96863    A
16    GAS6   3069.48462    P
17    FNTB    266.77686    A
18    PLD1    187.65569    A
19    PLD1   1891.04541    P
20    PLD1    258.79028    M

我尝试了找到Here的代码

代码语言:javascript
复制
library(data.table)
setDT(df)[, list(CALL=CALL[which.min(factor(CALL, levels=c('P', 'A', 'M')))]),
                                   .(SYMBOL)]

但我删除了第二列INTENSITY。任何帮助,请确保代码也是最快的。谢谢

预期产出

代码语言:javascript
复制
          SYMBOL  INTENSITY  CALL
    1     DDR1    596.95050    P
    2     RFC2    420.28708    P
    3     HSPA6   510.73254    P
    5     GUCA1A  121.53488    A
    6     UBA7   1810.49780    P
    9     CCL5   5966.24609    P
    10    CYP2E1   95.15707    A
    12    ESRRA  1024.88745    P
    13    CYP2A6  502.48877    A
    14    GAS6    921.70923    P
    15    MMP14   524.96863    A
    17    FNTB    266.77686    A
    19    PLD1   1891.04541    P
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-08 10:33:04

您可以使用order (在ith位置)对"CALL“列进行排序,方法是转换为具有按正确顺序指定的levelsfactor,并将第一个观察(.SD[1L])子集按‘符号’分组。

代码语言:javascript
复制
library(data.table)
setDT(df)[order(factor(CALL, levels=c('P', 'A', 'M'))),
                                 .SD[1L], by = SYMBOL]

或者仅仅修改您的代码,而不是list(CALL=..,我们可以使用.SD对行进行子集。

代码语言:javascript
复制
setDT(df)[, .SD[which.min(factor(CALL, levels=c('P', 'A', 'M')))], .(SYMBOL)]

使用dplyr的一个选项是

代码语言:javascript
复制
library(dplyr)
df %>%
    group_by(SYMBOL) %>%
    arrange(factor(CALL, levels=c('P', 'A', 'M'))) %>%
    slice(1L)

或者在which.min中使用slice

代码语言:javascript
复制
df %>%
    group_by(SYMBOL) %>%
    slice(which.min(factor(CALL, levels=c('P', 'A', 'M'))))
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31290021

复制
相关文章

相似问题

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