【发布时间】:2020-10-16 12:55:26
【问题描述】:
假设我有以下数据:
dat1 <- data.frame(id = c("a", "b", "c", "d"),
x = c(1, 2, 3, 4),
y = rep(NA, 4))
dat2 <- data.frame(id = c("a", "b", "c"),
y = c(9, 8, 7))
dat3 <- data.frame(id = c("d"),
y = c(6))
现在,我想将 dat2 和 dat3 中的数据一个接一个地合并/加入到 dat1,其中 dat1$y 值被 dat2.y 替换或 dat3.y 值,而不是将它们添加为新列。
问题在于merge 或left_join 不会将值添加到现有的 y 列,而是添加一个 y.y 列并将其从 dat1 重命名为 y.x。
我还认为我可以使用 tidyverse 中的 rows_update 函数,但问题是,在我的现实生活中,我不仅匹配一列(此处为:id),还匹配多个 id 列,但是 rows_update 只允许by 变量为一个向量。
注意:在我的实际用例中,我有
- ~50 个要合并的数据帧
- 我的行的唯一性只能通过多个 id 列来确定
- id 列在我的 dat1 和所有其他 dat2 到 dat50 数据帧中具有不同的名称。
将 dat2 和 dat3 合并到 dat1 后的预期输出为:
id x y
"a" 1 9
"b" 2 8
"c" 3 7
"d" 4 6
【问题讨论】:
-
好的,我的错误可能是我试图以类似于 left_join 语法的方式命名它们(因为在我的 real.life 数据帧中 id 列也有不同的名称)。我会相应地更新我的帖子。
-
在任何给定位置,所有数据帧中是否只有一个
y值?或者可能有多个y值,您想在最后的y列中选择第一个? -
不确定我是否关注,但只有一个 y 值,是的。
-
好的,不确定该评论去了哪里,但最简单的解决方案是为我的所有数据框的 id 列赋予相同的名称(即更改我帖子中的第三个条件)并使用 rows_update来自 tidyverse 的函数。像魅力一样工作。
标签: r merge left-join tidyverse