rbind和覆盖基于键变量的重复行?

rbind和覆盖基于键变量的重复行?,r,duplicates,rbind,R,Duplicates,Rbind,我想把复制品处理掉。它很容易使用!duplicated(),但在本例中,我特别希望删除/覆盖早期数据帧中的行,即,在本例中,第1部分中的“5b”应该被第2部分中的“5a”删除/覆盖。如果有一个part3的值为“5b”,那么part2的“5a”将被part3的“5b”删除/覆盖 我想要的是: > final key x 6 1 c 7 2 a 8 3 b 9 4 d 1 5 b #duplicate from part1 10 5 a #duplica

我想把复制品处理掉。它很容易使用!duplicated(),但在本例中,我特别希望删除/覆盖早期数据帧中的行,即,在本例中,第1部分中的“5b”应该被第2部分中的“5a”删除/覆盖。如果有一个part3的值为“5b”,那么part2的“5a”将被part3的“5b”删除/覆盖

我想要的是:

> final
   key x
6    1 c
7    2 a
8    3 b
9    4 d
1    5 b #duplicate from part1
10   5 a #duplicate from part2
2    6 d
3    7 a
4    8 c
5    9 b

当前解决方案:我唯一能想到的就是添加一个函数,用一个额外的变量标记每个数据帧,然后对其排序并使用!在那个变量上复制了。。。是否有一个更简单或更优雅的解决方案不需要标记

提示:使用
data.table()、setkey()、unique()
另外,请注意,R的排序函数是一个函数,保留卫星数据,因此您可以使用!重复,然后再次反转。也许,
duplicated
的“fromLast=T”参数有用吗?例如,
final[!duplicated(final$key,fromLast=T),]
看起来像是你的输出很抱歉把它挖出来了,但是原始海报没有接受这个答案,也没有跟进。我的处境和他们一样(除了我使用了多个键),这个答案只是有点不起作用。我希望能够保留关键条目中的后一个,而不是第一个。除了保留第一个键(5,r)而不是预期的键(5,w)外,此功能工作正常。键的顺序取决于您在不同数据帧中的顺序吗?嗨@kyles。您可以发布一个新问题,并简单地链接到此问题。(在这里用我的手机写信)
   key x
6    1 c
7    2 a
8    3 b
9    4 d
10   5 a #this is from part2, no more duplicate from part1
2    6 d
3    7 a
4    8 c
5    9 b
> final
   key x
6    1 c
7    2 a
8    3 b
9    4 d
1    5 b #duplicate from part1
10   5 a #duplicate from part2
2    6 d
3    7 a
4    8 c
5    9 b
   key x
6    1 c
7    2 a
8    3 b
9    4 d
10   5 a #this is from part2, no more duplicate from part1
2    6 d
3    7 a
4    8 c
5    9 b
## Create many data.frames

set.seed(1)

## Normally, do this in lapply... 
part1 <- data.frame(key=1:6,  x=sample(letters, 6))
part2 <- data.frame(key=4:8,  x=sample(letters, 5))
part3 <- data.frame(key=8:12, x=sample(letters, 5))
library(data.table)

## Collect all your "parts"
PARTS.LIST <- lapply(ls(pattern="^part\\d+"), function(x) get(x))


DT.part <- rbindlist(PARTS.LIST)

setkey(DT.part, key)
unique(DT.part, by="key")
ORIGINAL          UNIQUE
---------         -----------
> DT.part         > unique(DT.part, by="key")
    key x             key x
 1:   1 l          1:   1 l
 2:   2 v          2:   2 v
 3:   3 k          3:   3 k
 4:   4 q          4:   4 q
 5:   4 i          5:   5 r
 6:   5 r          6:   6 f
 7:   5 w          7:   7 v
 8:   6 f          8:   8 f
 9:   6 o          9:   9 j
10:   7 v         10:  10 d
11:   8 f         11:  11 g
12:   8 l         12:  12 m
13:   9 j
14:  10 d
15:  11 g
16:  12 m