我有两个数据框 x
和 y
:
> 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')
但没有按预期工作。
最佳答案
unique.data.table 有一个 by
参数,您可以为此使用它。
与 order(c1)
相结合,这样“第一个”元素也将是每个 name
c1
的最小值
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
关于r - 如何合并两个数据框并从 R 中的重复行中选择最低值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20256635/