如何解决两个列表的元素乘法
我有一个大型数据框,我想按顺序将两个变量列表相乘以创建相关的交互。
有人知道我如何按顺序迭代多个变量的乘法吗?理想情况下使用 data.table
或 purrr
我的数据看起来像这样
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
为'sepalvar'和'petalvar'获取list
中对象的值,并使用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)[,'multwidth') :=
.SD[,..sepalvar] * .SD[,..petalvar]]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。