gpt4 book ai didi

r - 在 R 中的 if 语句中使用 for 循环

转载 作者:行者123 更新时间:2023-12-02 07:22:36 24 4
gpt4 key购买 nike

我有一个问题,我需要将估计的增长率乘以基数。增长率存储在矩阵中(参见下面的数据示例),基数也是如此。这本身很容易 - 问题是我在基数后面有几种实体的几种增长率。

set.seed(1223)
Typ1.rates <- c(1.1,1.2,0.9,1.4)
Typ2.rates <- c(1.4,5.2,1.9,0.4)
g.rates <- t(cbind(Typ1.rates, Typ2.rates))


x <- as.data.frame(matrix(rexp(16, rate=.2), ncol=4)*100)
x$Type <- c(1,1,1,2)

因此,如果给定行的类型 == 1,我想将第一个观察值与 Typ1.rates 中的第一个观察值(即 [1,1])相乘,依此类推。

如果我有两种类型的速率,这显然很容易,但如果我有 25 种类型和大型矩阵/数据帧,这就很难手动完成。

谁有好的方法吗?

如果需要更多解释或数据/代码,请告诉我

编辑:

利用上面的种子集希望得到下面的矩阵

                       V1           V2           V3            V4
1: 141.8580480 1149.9857213 303.4234747 1014.77951629
2: 770.1481988 407.0247813 1219.3383377 156.62140585
3: 554.1117304 983.2339648 239.1584652 50.52442765
4: 584.8300270 1207.7605414 2252.7680594 43.13052390

最佳答案

要么使用简单的乘法

set.seed(1223)
g.rates[x[, 5], ] * x[, -5] # Note in your question you missed to include Typ2.rates

或者使用data.table

library(data.table)
setDT(x)[, .SD*g.rates[x$Type,] , .SDcols = paste0("V", 1:4)]
# V1 V2 V3 V4
#1 141.8580 1149.9857 303.4235 1014.77952
#2 770.1482 407.0248 1219.3383 156.62141
#3 554.1117 983.2340 239.1585 50.52443
#4 584.8300 1207.7605 2252.7681 43.13052

关于r - 在 R 中的 if 语句中使用 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41715530/

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