r - 如何合并两个数据框并从 R 中的重复行中选择最低值

标签 r

我有两个数据框 xy:

> 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/

相关文章:

r - 组合迭代器,如 expand.grid

r - 提取用于在 mgcv 中绘制平滑图的数据

r - 在 R data.frame 上有效组合多个条件

r - 在circos中使用circos函数

r - 使用列名称更改 ggplot2 (R) 的颜色

r - 如何在R中使用readLines读取某个范围内的所有行?

r - 在 R 中生成卡方分布的随机数

r - 如何在ggplot2中对齐旋转的多行x轴文本?

r - 使用 R 将日期序列添加到数据框中

r - 在相关矩阵中包装轴标签