gpt4 book ai didi

R data.table 设置值

转载 作者:行者123 更新时间:2023-12-04 11:00:16 24 4
gpt4 key购买 nike

我正在尝试使用以下代码设置以下 data.tables px & vol。 (退回到缓慢的 for 循环)

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'))

下面的方法不起作用。

s = a[1,id]
d = a[1,date_id]
b[id == s & date_id == d, list(names(b)[3:4])] <- a[id == s & date_id ==d, list(names(a)[2:3])]

以下代码失败

Error in `[<-.data.table`(`*tmp*`, id == s & date_id == d, list(names(b)[3:4]),  : 
j must be atomic vector, see ?is.atomic

我做错了什么以及如何将这些值从一个 data.table 设置为另一个元素。实际的表格有很多列,所以我不能手动写出来。

谢谢

最佳答案

您的示例中有多个问题。

首先,如果您想以 dt[ , "col" ] 的形式访问 data.table 中的列您必须添加 with=FALSE :

b[ , names(b)[3:4], with = FALSE ]

其次,我不确定是否可以使用赋值运算符(<-)在 data.table 中赋值。为此,有超快的 update-by-reference 运算符:

b[
id == s & date_id == d,
names(b)[3:4] := a[id == s & date_id ==d, names(a)[2:3], with = FALSE],
with = FALSE
]

第三,将 data.tables 子集为 dt[ col == value, ]语法是可能的,但速度很慢。特别是如果您已经在要作为子集的列上设置了键,则应使用以下语法:

b[
J(d,s),
names(b)[3:4] := a[J(d,s), names(a)[2:3], with = FALSE] ,
with = FALSE
]

第四,在我看来,这一切都好像您想要两个表的简单连接。所以最直接的方法是

a[ b[ , list(date_id, id) ] ]

或者考虑到您的评论,您只想覆盖列 pxvola 的子集中:

b[a, c("px", "vol") := a[, list(px, vol)], with = FALSE ]

关于R data.table 设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16757113/

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