gpt4 book ai didi

R数据表: update join

转载 作者:行者123 更新时间:2023-12-04 09:29:49 28 4
gpt4 key购买 nike

假设我有两个数据表:

X <- data.table(id = 1:5, L = letters[1:5])

id L
1: 1 a
2: 2 b
3: 3 c
4: 4 d
5: 5 e

Y <- data.table(id = 3:5, L = c(NA, "g", "h"), N = c(10, NA, 12))

id L N
1: 3 NA 10
2: 4 g NA
3: 5 h 12

是否可以使用数据表内置函数通过 XYid进行左外部联接?如果没有,我想构建一个具有以下预期输出的函数(例如 leftOuterJoin):
leftOuterJoin(X, Y, on = "id")

id L N
1: 1 a NA
2: 2 b NA
3: 3 NA 10
4: 4 g NA
5: 5 h 12

我尝试过但没有成功:
X[Y, on = "id"]

id L i.L N
1: 3 c NA 10
2: 4 d g NA
3: 5 e h 12

我也尝试过这个,这几乎是我想要的:
setkey(X, id)
setkey(Y, id)
merge(X, Y, all.x = TRUE)

id L.x L.y N
1: 1 a NA NA
2: 2 b NA NA
3: 3 c NA 10
4: 4 d g NA
5: 5 e h 12

最佳答案

这是一个更新联接:

library(data.table)
X <- data.table(id = 1:5, L = letters[1:5])
Y <- data.table(id = 3:5, L = c(NA, "g", "h"), N = c(10, NA, 12))
X[Y, on=.(id), c("L", "N"):=.(i.L, i.N)][]
# id L N
# 1: 1 a NA
# 2: 2 b NA
# 3: 3 NA 10
# 4: 4 g NA
# 5: 5 h 12

给您想要的结果。
Here我找到了多个列的解决方案:
library(data.table)
X <- data.table(id = 1:5, L = letters[1:5])
Y <- data.table(id = 3:5, L = c(NA, "g", "h"), N = c(10, NA, 12))

X[Y, on=.(id), names(Y)[-1]:=mget(paste0("i.", names(Y)[-1]))]

另一个变体:
n <- names(Y)
X[Y, on=.(id), (n):=mget(paste0("i.", n))]

关于R数据表: update join,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44433451/

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