2016-02-19 73 views
2

我有一個數據集是這樣的:刪除重複的值的行的所有副本中的R

name position type 
A  12  S 
B  13  T 
C  12  S 
D  12  T 
E  11  S 
F  10  S 

我想刪除重複同位置和類型行。

我試圖使用duplicated函數查找重複的行,但我不知道如何刪除所有行的重複值。

dup = db[duplicated(db[2:3]),] 

我想用同樣的位置和類型,但不同的名稱中刪除行。 我所需的輸出是:

name position type 
B  13  T 
D  12  T 
E  11  S 
F  10  S 
+0

你能發表一些代碼嗎? –

+2

類似的問題:http://stackoverflow.com/q/7854433/1191259 – Frank

+0

@akrun弗蘭克鏈接到的問題是一個有用的相關帖子,但我不認爲這應該被關閉,因爲它不是一個確切的副本。那個返回重複的索引,這個刪除它們。那個有向量的例子,這是關於data.frame的問題。這隻會涉及重複變量的一個子集。 –

回答

4

duplicated返回TRUE只起重複值。要返回所有重複的元素,我們可能需要反向應用duplicated,即從最後一個值到第一個,並使用OR條件,即|,否定和子集數據集。

db[!(duplicated(db[2:3])|duplicated(db[2:3], fromLast=TRUE)),] 
# name position type 
# 2 B  13 T 
# 4 D  12 T 
# 5 E  11 S 
# 6 F  10 S 
+1

感謝akrun您的明確和有益的解釋! – BlueSky

1

dplyr包使用直觀,可讀的代碼。

這裏的玩具例子,從mtcars取行,其中也有cylgear沒有重複值:

library(dplyr) 
mtcars %>% 
    group_by(cyl, gear) %>% 
    filter(n() == 1) %>% 
    ungroup() 

Source: local data frame [2 x 11] 

    mpg cyl disp hp drat wt qsec vs am gear carb 
    (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) 
1 21.5  4 120.1 97 3.70 2.465 20.01  1  0  3  1 
2 19.7  6 145.0 175 3.62 2.770 15.50  0  1  5  6 

缸和齒輪的這兩個組合都是唯一獨特的,你可以用按鈕確認:

mtcars %>% 
    count(cyl, gear)