簡體   English   中英

刪除 R 中所有重復的行

[英]Delete all duplicated rows in R

我有一個 data.frame 有重復的觀察結果,如何根據第一列刪除所有重復的數據(如果它們的第一個數據相同,則完全刪除這些條目)?

> a=c(1,4,5,5,6,6)
> b=c(2,5,7,4,4,2)
> c=c("a","b","c","a","b","c")
> test=data.frame(a,b,c)
> test
  a b c
1 1 2 a
2 4 5 b
3 5 7 c
4 5 4 a
5 6 4 b
6 6 2 c

我不想保留任何重復的行,以便我的最終輸出

  a b c
1 1 2 a
2 4 5 b

我已經嘗試了uniqueduplicate功能,但它們都保留了第一個重復的行(即,如果有 5 個重復記錄,則將刪除其中的 4 個),例如

  a b c
1 1 2 a
2 4 5 b
3 5 7 c
4 6 4 b

我該怎么辦? 謝謝!

您可以使用table()獲取列的頻率表,然后使用結果進行子集:

singletons <- names(which(table(test$a) == 1))
test[test$a %in% singletons, ]

  a b c
1 1 2 a
2 4 5 b

使用dplyr

require(dplyr)
test <- test %>% group_by(a) %>% filter(n()==1)
test

  a b c
1 1 2 a
2 4 5 b

您首先搜索重復行的第一列值:

val <- test[duplicated(test[,1]),1]
[1] 5 6

然后搜索可以找到這些值的行

rows <- test[,1] %in% test[duplicated(test[,1]),1]
[1] FALSE FALSE  TRUE  TRUE  TRUE  TRUE

然后選擇除這些行之外的所有行:

test[! rows,]
  a b c
1 1 2 a
2 4 5 b

奇怪的請求,但如果您想刪除任何列中有重復項的所有行,同時忽略其他列:

test[!duplicated(test$a) & ! duplicated(test$b) & ! duplicated(test$c),]
  a b c
1 1 2 a
2 4 5 b
3 5 7 c

但我看不出 '5 7 c' 在你的例子中是如何重復的。

輕松一步刪除重復項:

my_df <- my_df[-which(duplicated(my_df)), ]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM