gpt4 book ai didi

R data.table 替换另一个 data.table 中的值索引

转载 作者:行者123 更新时间:2023-12-04 12:10:43 26 4
gpt4 key购买 nike

嗨,仍在试图找出 data.table。如果我有一个 data.table 的值,如下所示,用另一个 data.table 中的值替换这些值的最有效方法是什么?

set.seed(123456)

a=data.table(
date_id = rep(seq(as.Date('2013-01-01'),as.Date('2013-04-10'),'days'),5),
px =rnorm(500,mean=50,sd=5),
vol=rnorm(500,mean=500000,sd=150000),
id=rep(letters[1:5],each=100)
)

b=data.table(
date_id=rep(seq(as.Date('2013-01-01'),length.out=600,by='days'),5),
id=rep(letters[1:5],each=600),
px=NA_real_,
vol=NA_real_
)

setkeyv(a,c('date_id','id'))
setkeyv(b,c('date_id','id'))

我正在尝试做的是将 b 中的 px 和 vol 替换为 date_idid 匹配的那些我对此有点困惑 - 我想可能是要走的路,但我不要认为这在实践中会起作用。
b[which(b$date_id %in% a$date_id & b$id %in% a$id),list(px:=a$px,vol:=a$vol)]

编辑

我尝试了以下
t = a[b,roll=T]
t[!is.na(px),list(px.1:=px,vol.1=vol),by=list(date_id,id)]

并收到错误消息
Error in `:=`(px.1, px) : 
:= is defined for use in j only, and (currently) only once; i.e., DT[i,col:=1L] and DT[,newcol:=sum(colB),by=colA] are ok, but not DT[i,col]:=1L, not DT[i]$col:=1L and not DT[,{newcol1:=1L;newcol2:=2L}]. Please see help(":="). Check is.data.table(DT) is TRUE.

最佳答案

如果您想替换 b 中的值您可以使用前缀 i. .来自 NEWS regarding version 1.7.10

The prefix i. can now be used in j to refer to join inherited columns of i that are otherwise masked by columns in x with the same name.


b[a, `:=`(px = i.px, vol = i.vol)]

关于R data.table 替换另一个 data.table 中的值索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16749036/

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