gpt4 book ai didi

r - 两个列表的元素乘法

转载 作者:行者123 更新时间:2023-12-04 07:48:39 25 4
gpt4 key购买 nike

我有一个大数据框,我想按顺序将两个变量列表相乘以创建相关的交互。
有人知道我如何按顺序迭代多个变量的乘法吗?理想情况下使用 data.tablepurrr我的数据看起来像这样

data(iris)
# I have two lists of variables
sepalvar <- c("Sepal.Length","Sepal.Width")
petalvar <- c("Petal.Length","Petal.Width")

#The final dataset should contain Sepal.Length*Petal.Length and a Sepal.Width*Petal.Width interactions. It would look something like this
setDT(iris)[,multlength:=Sepal.Length*Petal.Length
][,multwidth:=Sepal.Width*Petal.Width]
head(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species multlength multwidth
1: 5.1 3.5 1.4 0.2 setosa 7.14 0.70
2: 4.9 3.0 1.4 0.2 setosa 6.86 0.60
3: 4.7 3.2 1.3 0.2 setosa 6.11 0.64
4: 4.6 3.1 1.5 0.2 setosa 6.90 0.62
5: 5.0 3.6 1.4 0.2 setosa 7.00 0.72
6: 5.4 3.9 1.7 0.4 setosa 9.18 1.56

有没有办法可以在两个列表中依次迭代创建具有可识别名称的变量?
非常感谢您的帮助
最好的事物

最佳答案

我们可以mget获取 list 中对象的值对于 'sepalvar' 和 'petalvar',并使用 Map*对于相应的元素,并将其分配 ( := ) 到两个新列

library(data.table)
setDT(iris)[, c('multlength', 'multwidth')
:= Map(`*`, mget(sepalvar), mget(petalvar))]
-输出
head(iris)
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species multlength multwidth
#1: 5.1 3.5 1.4 0.2 setosa 7.14 0.70
#2: 4.9 3.0 1.4 0.2 setosa 6.86 0.60
#3: 4.7 3.2 1.3 0.2 setosa 6.11 0.64
#4: 4.6 3.1 1.5 0.2 setosa 6.90 0.62
#5: 5.0 3.6 1.4 0.2 setosa 7.00 0.72
#6: 5.4 3.9 1.7 0.4 setosa 9.18 1.56

或者另一种选择是使用 .SD
setDT(iris)[,   c('multlength', 'multwidth') := 
.SD[, ..sepalvar] * .SD[, ..petalvar]]

关于r - 两个列表的元素乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67079615/

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