gpt4 book ai didi

r - 根据来自其他数据框的最近邻居分配一个值

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

使用通用数据:

set.seed(456)

a <- sample(0:1,50,replace = T)
b <- rnorm(50,15,5)
df1 <- data.frame(a,b)

c <- seq(0.01,0.99,0.01)
d <- rep(NA, 99)
for (i in 1:99) {
d[i] <- 0.5*(10*c[i])^2+5
}
df2 <- data.frame(c,d)

对于每个 df1$b,我们想找到最近的 df2$d。然后我们创建一个新变量 df1$XYZ,它采用最近的 df2$d

df2$c

这个 question 引导我使用 data.table 库。但是我不确定 ddplyrgroup_by 是否也可以使用:

这是我的 data.table 尝试:

library(data.table)
dt1 <- data.table( df1 , key = "b" )
dt2 <- data.table( df2 , key = "d" )

dt[ ldt , list( d ) , roll = "nearest" ]

最佳答案

这是使用 data.table 的一种方法:

require(data.table)
setDT(df1)[, XYZ := setDT(df2)[df1, c, on=c(d="b"), roll="nearest"]]

您需要为每个df1$b 获取与df2$d 中最接近的值对应的df2$c。因此,我们需要加入 df2[df1],这会导致 nrow(df1) 行。这可以通过 setDT(df2)[df1, c , on=c(d="b"), roll="最近的"]

它返回您需要的结果。我们需要做的就是用名称 XYZ 将其添加回 df1。我们使用 := 来做到这一点。


构造rolling join的思路是这样的(假设df1df2都是数据表):

  1. 我们需要为 df1 的每一行获取一些值。这意味着,x[i] 语法中的 i = df1

    df2[df1]
  2. 我们需要加入 df2$ddf1$b。使用 on= 会是:

    df2[df1, on=c(d="b")]
  3. 我们只需要 c 列。使用 j 只选择该列。

    df2[df1, c, on=c(d="b")]
  4. 我们不需要equi-joinroll to nearest join。

    df2[df1, c, on=c(d="b"), roll="nearest"]

希望这对您有所帮助。

关于r - 根据来自其他数据框的最近邻居分配一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33562752/

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