繁体   English   中英

删除除最后一个实例之外的所有重复项

[英]Remove all duplicates except last instance

所以我在 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

我该怎么做呢? 现在我只能保留第一个实例。 我想要它做相反的事情? 有什么帮助吗?

这难道不是使用 '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 方法。 我更喜欢!duplicated而不是unique因为如果您比较组,它可以轻松访问集合补码。

使用!rev(duplicated(rev(ID)))过滤掉除最后唯一出现的所有事件。

要过滤数据集,请使用dataset[!rev(duplicated(rev(dataset$ID))),]

使用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']

使用 dplyr:

data <- data %>%
  group_by(ID) %>%
  slice(which.max(Tally))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM