gpt4 book ai didi

r - 使用一个 data.frame 更新另一个 data.frame

转载 作者:行者123 更新时间:2023-12-02 13:07:05 28 4
gpt4 key购买 nike

给定两个在列名称/数据类型方面相同的数据帧,其中某些列唯一标识行,是否有一种有效的函数/方法可以让一个数据帧“更新”另一个数据帧?

例如,在下面的例子中,原始替换'Name''Id'标识>。 goal 是从 original 中的 replacement 中查找所有行(通过唯一 ID)并替换为 Value1 的结果和值2

original = data.frame( Name = c("joe","john") , Id = c( 1 , 2) , Value1 = c(1.2,NA), Value2 = c(NA,9.2) )
replacement = data.frame( Name = c("john") , Id = 2 , Value1 = 2.2 , value2 = 5.9)
goal = data.frame( Name = c("joe","john") , Id = c( 1 , 2) , Value1 = c(1.2,2.2), Value2 = c(NA,5.9) )

该解决方案应该适用于任意长度的原始替换(尽管替换的行数永远不应多于原始)。实际上,我使用 2 个 id 列。

最佳答案

我会使用data.table对象。此代码似乎适用于您的示例:

library(data.table)

# set keys
original.dt <- data.table(original, key=c("Name", "Id"))
replacement.dt <- data.table(replacement, key=c("Name", "Id"))

goal2 <- original.dt
# subset and reassign
# goal2[replacement.dt[, list(Name, Id)]] <- replacement.dt
goal2[replacement.dt] <- replacement.dt # cleaner and faster, see Matthew's comment

goal2 <- as.data.frame(goal2)

identical(goal, goal2) # FALSE, why? See Joris's comment
all.equal(goal, goal2) # TRUE

关于r - 使用一个 data.frame 更新另一个 data.frame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7971513/

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