gpt4 book ai didi

r - 在 R 中,将两个数据帧按元素相乘并乘以一个向量

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

带有数据框

d <- data.frame("A" = c(1.1, 2.1, 3.1, 4.1), "B" = c(5.5, 6.6, 7.7, 8.8))
A B
1 1.1 5.5
2 2.1 6.6
3 3.1 7.7
4 4.1 8.8

和两个向量

e <- c(10, 20, 30, 40)
[1] 10 20 30 40

ti <- seq(0, 5)
[1] 0 1 2 3 4 5

我得到了输出

a1 <- lapply(d, function(x) mapply(function(x, y) x * y * ti, x, e))
$A
[,1] [,2] [,3] [,4]
[1,] 0 0 0 0
[2,] 11 42 93 164
[3,] 22 84 186 328
[4,] 33 126 279 492
[5,] 44 168 372 656
[6,] 55 210 465 820

$B
[,1] [,2] [,3] [,4]
[1,] 0 0 0 0
[2,] 55 132 231 352
[3,] 110 264 462 704
[4,] 165 396 693 1056
[5,] 220 528 924 1408
[6,] 275 660 1155 1760

如果我用数据框替换向量 e

f <- data.frame("A" = c(10, 20, 30, 40), "B" = c(50, 60, 70, 80))
A B
1 10 50
2 20 60
3 30 70
4 40 80

如何获取输出

$A
[,1] [,2] [,3] [,4]
[1,] 0 0 0 0
[2,] 11 42 93 164
[3,] 22 84 186 328
[4,] 33 126 279 492
[5,] 44 168 372 656
[6,] 55 210 465 820
$B
[,1] [,2] [,3] [,4]
[1,] 0 0 0 0
[2,] 275 396 539 704
[3,] 550 792 1078 1408
[4,] 825 1188 1617 2112
[5,] 1100 1584 2156 2816
[6,] 1375 1980 2695 3520

df 是按元素操作的吗?

我知道 df 将始终具有相同的维度。

更新:

此外,是否有解决方案可以使用更复杂的函数,例如 d * exp(ti * f) 而不是 d * ti * f?

最佳答案

在带有 Mapouter 的 base R 中,你可以这样做

Map(function(x, y) t(outer(x, ti) * y), d, f)
$A
[,1] [,2] [,3] [,4]
[1,] 0 0 0 0
[2,] 11 42 93 164
[3,] 22 84 186 328
[4,] 33 126 279 492
[5,] 44 168 372 656
[6,] 55 210 465 820

$B
[,1] [,2] [,3] [,4]
[1,] 0 0 0 0
[2,] 275 396 539 704
[3,] 550 792 1078 1408
[4,] 825 1188 1617 2112
[5,] 1100 1584 2156 2816
[6,] 1375 1980 2695 3520

因为 f 中的向量长度为​​ 4,我们使用 outer(x, ti),这会产生一个 4X6 矩阵,这使得 y 可以使用循环适本地乘以相应的元素,但需要对结果进行 t 转置。

这也可以用 %o% 运算符写成

Map(function(x, y) t(x %o% ti * y), d, f)

关于r - 在 R 中,将两个数据帧按元素相乘并乘以一个向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46080203/

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