gpt4 book ai didi

r - 在R中: Replacing value of a data frame column by the value of another data frame when between condition is matched

转载 作者:行者123 更新时间:2023-12-02 05:08:39 27 4
gpt4 key购买 nike

我有两个数据框:

set.seed(343)
testDF <- data.frame(Score = sample(50, size=50, replace=TRUE), number = rep(letters[1:25],2), Rev = rep(0,50))
sourceDF <- data.frame(min = c(1,10,20,30,40), max = c(9, 19, 29, 39, 50), rev = 1:5)

对于 testDF 中 testDF$score 介于 sourceDF 的 sourceDF$min 和 sourceDF$max 之间的每一行,将 testDF$Rev 的值替换为相应的 sourceDF$rev。

我让它使用两个 for 循环和一个 if 条件,但它......很慢(我的数据集有接近 100 万行)。我尝试使用 findInterval 但没有成功。

是否有更好/更有效的方法来做到这一点?

最佳答案

首先,请参阅我关于如何改进您的问题并使其可重现的评论。其次,这是一种可能的方法,如何使用 data.table::foverlaps

快速运行重叠连接
library(data.table)
setkey(setDT(testDF)[, Score2 := Score], Score, Score2) # create bounds and key
setkey(setDT(sourceDF), min, max) # Key by min, max
indx <- foverlaps(sourceDF, testDF, nomatch = 0L, which = TRUE) # run foverlaps
testDF[indx$yid, Rev := sourceDF[indx$xid, rev]] # Update in place by corresponding values

关于r - 在R中: Replacing value of a data frame column by the value of another data frame when between condition is matched,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31172824/

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