rbind和覆盖基于键变量的重复行?
我想把复制品处理掉。它很容易使用!duplicated(),但在本例中,我特别希望删除/覆盖早期数据帧中的行,即,在本例中,第1部分中的“5b”应该被第2部分中的“5a”删除/覆盖。如果有一个part3的值为“5b”,那么part2的“5a”将被part3的“5b”删除/覆盖 我想要的是: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
> 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