gpt4 book ai didi

r - 快速识别满足 data.table 中特定条件的观察结果的方法

转载 作者:行者123 更新时间:2023-12-01 12:25:18 24 4
gpt4 key购买 nike

library('data.table')
set.seed(1)
A<-data.table(age = rnorm(10, mean = 10), V1= rnorm(10))

情况是我想在 data.table A 中创建一个新列,对于每个观察,它会寻找年龄差距在 0.5 到 1 岁之间的任何观察,并将该观察的 V1 的值用作当前观察的 V2。如果有多个观测值符合标准,只需确定最接近 0.5 年差距的观测值。

我想知道是否有一种快速的方法可以在不使用 for 循环的情况下在 data.table 中实现这一点。

最佳答案

这是可能的……而且很有趣……但不是那么漂亮,也不可读:

CJ(A1=A$age,A2=A$age)[,.(A1, A2,d=abs(A1-A2))
][d>=0.5 & d<=1
][, .(d, dmin=min(d),A2), by="A1"
][d==dmin
][A, .(A1, A2,V2=i.V1,d), on=c(A2="age"), nomatch=0
][A, .(age=A1, A2, V1, d, V2), on=c(A1="age")]

age A2 V1 d V2
1: 9.373546 10.183643 1.51178117 0.8100971 0.38984324
2: 10.183643 10.738325 0.38984324 0.5546814 0.94383621
3: 9.164371 9.694612 -0.62124058 0.5302402 0.59390132
4: 11.595281 10.738325 -2.21469989 0.8569561 0.94383621
5: 10.329508 9.694612 1.12493092 0.6348962 0.59390132
6: 9.179532 9.694612 -0.04493361 0.5150800 0.59390132
7: 10.487429 9.694612 -0.01619026 0.7928174 0.59390132
8: 10.738325 10.183643 0.94383621 0.5546814 0.38984324
9: 10.575781 9.694612 0.82122120 0.8811697 0.59390132
10: 9.694612 9.179532 0.59390132 0.5150800 -0.04493361

关于r - 快速识别满足 data.table 中特定条件的观察结果的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40498364/

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