> 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(),但在這種情況下,我特別想丟棄/覆蓋早期數據框中的行 - 即在這種情況下,part1中的「5b」應該被part2中的「5a」丟棄/覆蓋。如果part3的值是「5b」,那麼part2的「5a」將被part3的「5b」丟棄/覆蓋。
我想要什麼:
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
目前的解決方案:我能想到的唯一的事情就是添加一個功能標誌一個額外的變量中的每個數據幀,然後進行排序,並使用複製在該變量! ..有沒有更簡單或更優雅的解決方案,不需要標記?
提示:使用'data.table(),setkey的(),唯一的()' –
另外,還要注意的是,R的排序功能是[穩定的排序算法](http://en.wikipedia.org/wiki/Sorting_algorithm#Stability)並保留衛星數據,因此您可以反轉,使用!重複,然後再次反向。 –
也許「重複」的「from last = T」參數可能有用嗎?例如。 '最後[!重複(最後一個$ key,fromLast = T)]'看起來像你的輸出 –