2013-03-26 89 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)) 
相关问题