我有一个大型数据集,其中包含一些重复的行。但是,重复的行在所有列中都是相同的,只有一列除外,因此很难使用 dplyr duplicated() 或 unique()。正如您在下面看到的(短数据示例),除了第一列 gene_ID 之外,这些行几乎相同,其中条目的末尾不同。
<表类="s-表">
<头>
gene_ID |
Gene_Identifier |
类别 |
长度 |
<正文>
Wdfy1_chr1_79702262_79776143(-)_transcript=ENSMUST00000113515.7 |
Wdfy1 |
拼接 |
4551 |
Wdfy1_chr1_79702262_79776143(-)_transcript=ENSMUST00000113514.7 |
Wdfy1 |
拼接 |
4551 |
Wdfy1_chr1_79702262_79776143(-)_transcript=ENSMUST00000113513.7 |
Wdfy1 |
拼接 |
4551 |
Wdfy1_chr1_79702262_79776143(-)_transcript=ENSMUST00000113512.7 |
Wdfy1 |
拼接 |
4551 |
表>
我想删除除顶部/第一个条目之外的所有行。
我试过:
test <- aggregate(gene_ID ~ ., df, toString)
^^ 这合并了比我预期更多的行(~4,000 对~ 50),所以我不确定这是否正确。我目前正在逐行查看这是否确实符合我的要求
test2 <- df %>%
group_by_at(vars(-gene_ID)) %>%
filter(n() > 1)
^^^这不保留任何重复项,它删除了所有
test3 <- df %>%
group_by_at(vars(-gene_ID)) %>%
duplicated(df)
^^^^ 此错误:“错误:参数‘incomparables != FALSE’尚未使用(尚未)”
我们可能需要
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))