gpt4 book ai didi

r - 连接 data.frame 或 data.table 中的匹配列

转载 作者:行者123 更新时间:2023-12-04 06:44:02 25 4
gpt4 key购买 nike

我有以下 data.frames:

a <- data.frame(id = 1:3, v1 = c('a', NA, NA), v2 = c(NA, 'b', 'c'))
b <- data.frame(id = 1:3, v1 = c(NA, 'B', 'C'), v2 = c("A", NA, NA))
> a
id v1 v2
1 1 a <NA>
2 2 <NA> b
3 3 <NA> c
> b
id v1 v2
1 1 <NA> A
2 2 B <NA>
3 3 C <NA>

注:在两个表中都没有定义 v1 或 v2 的 ID;每个 id 值的每列中只有一个唯一的非 NA 值

我想在“id”的匹配值上合并这些数据框:
ab <- merge(a, b, by = "id")

但我也想合并这两列 v1v2 , 使 data.frame ab看起来像这样:
ab <- data.frame(id = 1:3, v1 = c("a", "B", "C"), v2 = c("A", "b", "c"))

> ab
id v1 v2
1 1 a A
2 2 B b
3 3 C c

相反,我得到了这个:
> merge(a, b, by = "id")
id v1.x v2.x v1.y v2.y
1 1 a <NA> <NA> A
2 2 <NA> b B <NA>
3 3 <NA> c C <NA>

使用 data.frame 的示例会很有帮助和 data.table ,所以这里是上面的 data.table 版本:
A <- data.table(a, key = 'id')
B <- data.table(b, key = 'id')
A[B]

最佳答案

您指定的合并类型可能无法使用 merge (带有数据框),虽然说这通常会导致被证明是错误的。

您还省略了一些细节:是否总会有一个唯一的非 NA每个列中的值 id值(value)?如果是这样,这将起作用:

ab <- rbind(a,b)
> colFun <- function(x){x[which(!is.na(x))]}
> ddply(ab,.(id),function(x){colwise(colFun)(x)})
id v1 v2
1 1 a A
2 2 B b
3 3 C c

类似的策略应该适用于 data.table s 也是:
abDT <- data.table(ab,key = "id")
> abDT[,list(colFun(v1),colFun(v2)),by = id]
id V1 V2
[1,] 1 a A
[2,] 2 B b
[3,] 3 C c

关于r - 连接 data.frame 或 data.table 中的匹配列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9918450/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com