当一列不同于所有行时,删除除一个重复行以外的所有行(涉及R语言)。

3

我有一个包含重复行的大型数据集。但是,重复行在除了一列之外的所有列中都是相同的,这使得使用dplyr duplicated()或unique()函数很困难。如下所示(短数据示例),这些行几乎完全相同,只有第一列gene_ID的末尾不同。

gene_ID Gene_Identifier Category Length
Wdfy1_chr1_79702262_79776143(-)_transcript=ENSMUST00000113515.7 Wdfy1 Spliced 4551
Wdfy1_chr1_79702262_79776143(-)_transcript=ENSMUST00000113514.7 Wdfy1 Spliced 4551
Wdfy1_chr1_79702262_79776143(-)_transcript=ENSMUST00000113513.7 Wdfy1 Spliced 4551
Wdfy1_chr1_79702262_79776143(-)_transcript=ENSMUST00000113512.7 Wdfy1 Spliced 4551

我想删除除第一个条目之外的所有行。

我已经尝试过:

test <- aggregate(gene_ID ~ ., df, toString)

这个合并的行数比我预期的要多(大约4000行和50行),所以我不确定这是否正确。我目前正在逐行查看以确认它是否实际上做了我想要的事情。

test2 <- df %>% 
  group_by_at(vars(-gene_ID)) %>%
  filter(n() > 1)

^^^这并不保留任何重复项,而是将它们全部删除了。

test3 <- df %>% 
  group_by_at(vars(-gene_ID)) %>%
  duplicated(df)

^^^^ 这个错误提示:"错误:参数'incomparables != FALSE'尚未使用"

2个回答

1
我们可能需要
df[!duplicated(df[-1]), , drop = FALSE]

-输出

                                              gene_ID Gene_Identifier Category Length
1 Wdfy1_chr1_79702262_79776143(-)_transcript=ENSMUST00000113515.7           Wdfy1  Spliced   4551

或者使用 dplyr

library(dplyr)
df %>%
   filter(!duplicated(across(-gene_ID)))

-输出

                                                       gene_ID Gene_Identifier Category Length
1 Wdfy1_chr1_79702262_79776143(-)_transcript=ENSMUST00000113515.7           Wdfy1  Spliced   4551

数据

df <- structure(list(gene_ID = c("Wdfy1_chr1_79702262_79776143(-)_transcript=ENSMUST00000113515.7", 
"Wdfy1_chr1_79702262_79776143(-)_transcript=ENSMUST00000113514.7", 
"Wdfy1_chr1_79702262_79776143(-)_transcript=ENSMUST00000113513.7", 
"Wdfy1_chr1_79702262_79776143(-)_transcript=ENSMUST00000113512.7"
), Gene_Identifier = c("Wdfy1", "Wdfy1", "Wdfy1", "Wdfy1"), Category = c("Spliced", 
"Spliced", "Spliced", "Spliced"), Length = c(4551L, 4551L, 4551L, 
4551L)), class = "data.frame", row.names = c(NA, -4L))

1
谢谢!这些都能够解决问题,我选择接受此答案是因为有多种解决方法。 - ispeakcat

1
library(dplyr)

data <-

tibble::tribble(
                                                           ~gene_ID, ~Gene_Identifier, ~Category, ~Length,
  "Wdfy1_chr1_79702262_79776143(-)_transcript=ENSMUST00000113515.7",          "Wdfy1", "Spliced",   4551L,
  "Wdfy1_chr1_79702262_79776143(-)_transcript=ENSMUST00000113514.7",          "Wdfy1", "Spliced",   4551L,
  "Wdfy1_chr1_79702262_79776143(-)_transcript=ENSMUST00000113513.7",          "Wdfy1", "Spliced",   4551L,
  "Wdfy1_chr1_79702262_79776143(-)_transcript=ENSMUST00000113512.7",          "Wdfy1", "Spliced",   4551L
  )


data %>%
  group_by(Gene_Identifier,Category,Length) %>% 
  filter(row_number() == 1)

  gene_ID                                                         Gene_Identifier Category Length
  <chr>                                                           <chr>           <chr>     <int>
1 Wdfy1_chr1_79702262_79776143(-)_transcript=ENSMUST00000113515.7 Wdfy1           Spliced    4551

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接