【问题标题】:How to remove rows of specific duplicate depending on groups in R? [duplicate]如何根据 R 中的组删除特定重复的行? [复制]
【发布时间】:2021-08-13 10:28:56
【问题描述】:

我有一组基因数据集。有时一个基因可以出现在多个组中,如果某个基因出现在另一个组中并且它是该组中唯一的基因,我想删除它的重复。

例如我的数据如下:

Group       Gene
1           Gene1
1           Gene2
1           Gene3
2           Gene3
2           Gene4
3           Gene1
4           Gene10
4           Gene11

Gene1 出现在第 1 组和第 3 组中,但在第 3 组中它是该组中唯一的基因,因此我想删除该行。如何针对这种情况进行编码,然后通过该过滤器删除重复项?

我看到了一些类似的问题,并且我尝试过重新利用代码,但我还没有走多远。目前我正在尝试:

library(dplyr)

df %>% 
   group_by(Gene) %>% 
   mutate(duplicates = filter(n() > 1))
   mutate(to_remove = duplicates == TRUE & Group = filter(n() == 1))

但我可能根本没有正确理解这个语法,我不经常使用 dplyr。

输入数据示例:

df <- structure(list(Group = c(1L, 1L, 1L, 2L, 2L, 3L, 4L, 4L), Gene = c("Gene1", 
"Gene2", "Gene3", "Gene3", "Gene4", "Gene1", "Gene10", "Gene11"
)), row.names = c(NA, -8L), class = c("data.table", "data.frame"
))

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    也许你可以试试subset + ave

    > subset(
    +   df,
    +   ave(Gene, Group, FUN = function(x) unique(length(x))) > 1
    + )
      Group   Gene
    1     1  Gene1
    2     1  Gene2
    3     1  Gene3
    4     2  Gene3
    5     2  Gene4
    7     4 Gene10
    8     4 Gene11
    

    dplyr 选项

    > df %>%
    +   group_by(Group) %>%
    +   filter(n_distinct(Gene) > 1) %>%
    +   ungroup()
    # A tibble: 7 x 2
      Group Gene  
      <int> <chr>
    1     1 Gene1
    2     1 Gene2
    3     1 Gene3
    4     2 Gene3
    5     2 Gene4
    6     4 Gene10
    7     4 Gene11
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-23
      • 2021-05-13
      • 2017-04-13
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 2018-05-30
      • 2021-07-04
      相关资源
      最近更新 更多