2013-11-28 61 views
3

挑选从复制行最低值,我有两个数据帧xy如何合并两个数据帧和R中

> x <- data.frame(name = c("foo","bar"), c1 = c(0.1,0.2), c2=c("y","w")) 
> x 
    name c1 c2 
1 foo 0.1 y 
2 bar 0.2 w 
> y <- data.frame(name = c("foo","bar","qux"), c1 = c(0.3,0.2,0.8), c2=c("k","w","z")) 
> y 
    name c1 c2 
1 foo 0.3 k 
2 bar 0.2 w 
3 qux 0.8 z 

在现实中,列可以超过c2。 我想要做的就是将它们合并,使其造成的:

name c1 c2 
foo 0.1 y 
bar 0.2 w 
qux 0.8 z 

因此请注意,合并和当有两行相同name但不同c1值 我们选择一个与最低c1时,不管c2,c3,c4....的值如何实现?

我试过命令merge(x,y,by='name'),但没有按预期工作。

回答

2

unique.data.table有一个by参数,您可以使用它。
order(c1)组合,使得“第一”元件也将是c1最小每个name

library(data.table) 
x <- data.table(x, key=name) 
y <- data.table(y, key=name) 

xy <- merge(x, y, all=TRUE) 

unique(xy[order(c1)], by="name") 
# name c1 c2 
# 1: foo 0.1 y 
# 2: bar 0.2 w 
# 3: qux 0.8 z