2013-03-26 85 views
13

所以我在R中的以下佈局作爲例子,數據集:刪除所有重複,除了最後一個實例

ID Date Tally 
1 2/1/2011 1 
2 2/1/2011 2 
3 2/1/2011 3 
1 2/1/2011 4 
2 2/1/2011 5 
1 2/1/2011 6 
3 2/1/2011 7 
4 2/1/2011 8 
2 2/1/2011 9 

我想刪除除的帖子ID的最後一個實例的所有實例。現在我可以在網上找到的所有東西以及我正在使用的函數都是除FIRST實例之外的所有東西。

所以我的新的數據幀將如下所示:

ID Date Tally 
1 2/1/2011 6 
3 2/1/2011 7 
4 2/1/2011 8 
2 2/1/2011 9 

我該怎麼辦呢?現在我只能保持第一個例子。我想讓它做相反的事情嗎?任何幫助?

包涵我新至R :)

回答

9

使用!rev(duplicated(rev(ID)))過濾掉所有,但最後一個獨特的事件。

來獲取數據集過濾,使用dataset[!rev(duplicated(rev(dataset$ID))),]

10

這是不是僅僅是使用「fromLast」參數來duplicated標準的情況下?

dat[ !duplicated(dat[, c("ID", "Date")], fromLast=T),] 
#--------- 
    ID  Date Tally 
6 1 2/1/2011  6 
7 3 2/1/2011  7 
8 4 2/1/2011  8 
9 2 2/1/2011  9 

你舉的例子還不夠豐富告訴你是否需要「日期」欄測試來回重複,那麼也許你可以簡化。我打算說明duplicated有一個data.frame方法。我更喜歡!duplicatedunique,因爲如果您正在比較組,它可以輕鬆訪問補集。

+0

(+1)確實。 :-)然而,我有'duplicateated.data.frame'的問題,因爲代碼基本上是'重複的(do.call(「paste」,c(x,sep =「\ r」)),fromLast = fromLast )',如幫助頁面指出的那樣,「如果數據框中有嵌入回車符的字符或不能可靠映射到字符的列,則可能不完美」。 – 2013-03-26 17:26:02

4

使用data.table加入,您可以設置mult = 'last'

例如

library(data.table) 
DT <- data.table(DF, key = 'id') 

# join with the unique ID values 
DT[unique(DT[,list(ID)]), mult= 'last'] 

    ID  Date Tally 
1: 1 2/1/2011  6 
2: 2 2/1/2011  9 
3: 3 2/1/2011  7 
4: 4 2/1/2011  8 

如果你知道你可以的唯一ID也下列任何

DT[.(1:4), mult='last'] 
DT[list(1:4), mult = 'last'] 
1

使用dplyr的:

data <- data %>% 
    group_by(ID) %>% 
    slice(which.max(Tally)) 
相關問題