gpt4 book ai didi

r - 从具有相似结构的数据更新数据框/表

转载 作者:行者123 更新时间:2023-12-02 08:21:50 26 4
gpt4 key购买 nike

我有两个结构相似的数据表(行数相同,变量相同)。我想使用第二个数据框中的值更新第一个数据框中的值,除非这些值未定义。这是一个可重现的例子(使用 data.table,但思路是一样的):

library(data.table)

DT1 <- data.table(Categ = c("A", "B", "C"),
x = c(12,50,34),
y= c(5,2,8))

DT2 <- data.table(Categ = c("A", "B", "C"),
x = c(30,NA,NA),
y= c(1,NA,6))

我的解决方案相当简单,但根本不可扩展 - 如果添加新列,则必须修改代码。此外,它需要每列一行代码:

setnames(DT2, c("x","y"), c("x_new","y_new"))
DT3 <- merge(DT1,DT2,by='Categ')

DT3[!is.na(x_new), x:=x_new]
DT3[!is.na(y_new), y:=y_new]

预期输出,只是为了确保我解释正确:

Categ    x  y
A 30 1
B 50 2
C 34 6

最佳答案

当然,我们需要确定每列的哪些行具有 NA。 AFAICT 无可避免。考虑到这一点,这就是我们能够想到的(@akrun 解决方案的变体):

# get DT1's matching indices for each row of DT2, handle multiple matches as well
idx = DT1[DT2, which = TRUE, on = "Categ", mult = "first"]
for (col in c("x", "y")) {
nas = which(is.na(DT2[[col]]))
this_idx = idx[nas]
set(DT2, i = nas, j = col, value = DT1[[col]][this_idx])
}

这假定两个数据表中的列名相同。

关于r - 从具有相似结构的数据更新数据框/表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36545857/

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