gpt4 book ai didi

r - 数据表中的逐个元素相乘 - 同时多个变量 (R)

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

假设我在 R 中有以下数据表:

L3 <- LETTERS[1:3]
(d <- data.table(cbind(x = 1, y = 1:10), fac = sample(L3, 10, replace = TRUE)))
vecfx=c(5.3,2.8)

我想计算两个新变量, dot1dot2即:
d[,dot1:=5.3*x]
d[,dot2:=2.8*y]

但我不想以这种方式计算它们,因为这是我的问题的放松。在我原来的问题中, vecfx由 12 个元素组成,我的数据表有十二列,所以我想避免写那十二次。

我试过这个: vecfx*d[,list(x,y)]但我没有得到想要的结果(似乎产品是按行而不是按列完成的)。另外,我想在我的数据表中创建这两个新变量 d .

当您想在 R 中的数据表中同时创建多个列时,这也很有用。 .

任何帮助表示赞赏。

最佳答案

更新:在 v1.8.11 , FR #2077现已实现 - set()现在可以通过引用添加列,.来自 NEWS :

set() is able to add new columns by reference now. For example, set(DT, i=3:5, j="bla", 5L) is equivalent to DT[3:5, bla := 5L]. This was FR #2077. Tests added.



然后可以做到(正如@MatthewDowle 在评论中所建议的那样):
for (j in seq_along(vecfx)) 
set(d, i=NULL, j=paste0("dot", j), vecfx[j]*d[[j]])

我认为您正在寻找 ?set .请注意 set()也通过引用添加并且非常快!粘贴来自 ?set 的相关部分:

Since [.data.table incurs overhead to check the existence and type of arguments (for example), set() provides direct (but less flexible) assignment by reference with low overhead, appropriate for use inside a for loop. See examples. := is more flexible than set() because := is intended to be combined with i and by in single queries on large datasets.


for (j in seq_along(vecfx)) 
set(d, i=NULL, j=j, vecfx[j]*d[[j]])
x y fac
1: 5.3 2.8 B
2: 5.3 5.6 C
3: 5.3 8.4 C
4: 5.3 11.2 C
5: 5.3 14.0 B
6: 5.3 16.8 B
7: 5.3 19.6 C
8: 5.3 22.4 C
9: 5.3 25.2 C
10: 5.3 28.0 C

只需为 set 提供正确的索引即可.

关于r - 数据表中的逐个元素相乘 - 同时多个变量 (R),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18990863/

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