> part1<-data.frame(key=c(5,6,7,8,9),x=c("b","d","a","c","b"))
> part1
key x
1 5 b # key==5,x==b
2 6 d
3 7 a
4 8 c
5 9 b
> part2<-data.frame(key=c(1,2,3,4,5), x=c("c","a","b","d","a"))
> part2
key x
1 1 c
2 2 a
3 3 b
4 4 d
5 5 a # key==5,x==a
有超过 2 个数据帧,但我将在此示例中仅使用 2 个。然后我使用 lapply 将它们全部放在一个名为 dflist1 的列表中,然后对它们进行 rbind。对于此示例,我将手动进行。
dflist1<-list(part1,part2)
final<-do.call(rbind,dflist1)
final<-final[order(final$key),] #sort by key
结果:
> 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
我想摆脱重复。它很容易使用!duplicated() 但在这种情况下,我特别想删除/覆盖早期数据帧中的行 - 即,在这种情况下,第 1 部分的“5 b”应该被第 2 部分的“5 a”删除/覆盖. 如果有一个值为“5 b”的 part3,那么来自 part2 的“5 a”将被来自 part3 的“5 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
当前解决方案:我唯一能想到的就是添加一个函数,用一个额外的变量标记每个数据帧,然后对其进行排序并在该变量上使用 !duplicated ... 是否有一个更简单或更优雅的解决方案不需要标记?