2017-08-02 61 views
0

這可能是一個無法知道正確的關鍵字進行搜索,但我正在尋找一種方式刪除基於兩個非數字之間的順序顛倒的重複 - 數字列。這是我的數據的一個很小的子集:基於應用於2個非數字列的+ b邏輯刪除重複

ANIMAL1<-c("20074674_K.v1","20085105_K.v1","20085638_K.v1","20085646_K.v1") 
ANIMAL2<-c("20085105_K.v1","20074674_K.v1","20074674_K.v1","20074674_K.v1") 
exclusions<-c(13,13,5,10) 
data<-data.frame(ANIMAL1,ANIMAL2,exclusions) 
ANIMAL1 ANIMAL2 exclusions 
1 20074674_K.v1 20085105_K.v1 13 
2 20085105_K.v1 20074674_K.v1 13 
3 20085638_K.v1 20074674_K.v1 5 
4 20085646_K.v1 20074674_K.v1 10 

第一和第二行是重複的比較,動物的順序剛好對調前兩列之間。刪除哪一個並不重要,但是我想刪除其中一個重複項......以及所有其他重複項,這些重複項都適合我的較大數據框中的邏輯。我習慣根據這些問題中的邏輯進行子集化:Remove duplicate column pairs, sort rows based on 2 columns和其他找到「基於2列刪除重複項」的帖子,但我還沒有發現任何與我的用例大致相似的內容。這裏是我想我的數據看起來像重複刪除後:

ANIMAL1 ANIMAL2 exclusions 
1 20085105_K.v1 20074674_K.v1 13 
2 20085638_K.v1 20074674_K.v1 5 
3 20085646_K.v1 20074674_K.v1 10  

非常感謝!

+0

你能發表一個你希望數據在過程結束時看起來像什麼樣子的例子嗎? –

回答

0
data[duplicated(t(apply(data,1,sort))) == FALSE,] 
  1. 排序每一行,讓我做的ANIMAL1ANIMAL2跨越每行相同的各行的組合,如果他們是在不同的列。排除項目也被排序,但在這種情況下,您不必這樣做。
  2. 當按行排序時,數據需要作爲原始數據集轉置回列
  3. 標記行重複並將其除去。
+0

請注意你解釋你的答案? –

+0

我認爲這是行得通的,只是將它們砍到一起,基本上...... 1.按每行排序,這樣如果它們在不同的列中,我將每行的ANIMAL1或ANIMAL2組合排成相同,排除順序也與好吧,但在這種情況下,你不必。 2.當按行排序時,數據需要作爲原始數據集轉換回列3.標記行復制並去除它們。 不知道這是你在找什麼... – user8383881