我有一个大数据框。每行都有特定日期的数据。下一组列有股票价格。每列代表一只股票。然后我有偏移列,每个库存列一个。我必须将当前行偏移量。然后我将在第一组列(但现在使用偏移行)中找到的价格放在最后一组列中,以 NA 开头。
例如,第 1 行第 3 列的值是 1,所以我需要将第一行偏移 1。这给了我第 2 行。我需要获取价格 p1,即第 2 行第 1 列中的价格。值为 2。然后将值 2 放入第 1 行第 5 列。
我理论上用双循环解决了这个问题,但是代码慢得令人绝望。我能够消除一个循环。有人可以帮我消除剩余的循环吗?
下面是我的代码以及代码运行前后的数据框。请注意,在示例中,我省略了日期,因为它们不是必需的。
p1 = 1:1000000
p2 = 11:1000010
of1 = c(rep(1, 100000), rep(2, 800000), rep(0, 100000) )
of2 = c(rep(2,100000),rep(1,800000), rep(0, 100000) )
DF1 = data.frame(p1 = p1, p2 = p2, of1 = of1, of2 = of2)
DF1$newPrice1 = rep(NA, 1000000)
DF1$newPrice2 = rep(NA, 1000000)
head(DF1)
p1 p2 of1 of2 newPrice1 newPrice2
1 1 11 1 2 NA NA
2 2 12 1 2 NA NA
3 3 13 1 2 NA NA
4 4 14 1 2 NA NA
5 5 15 1 2 NA NA
6 6 16 1 2 NA NA
for(j in 1:2) {
DF1[j+4] = DF1[DF1[,j+2] + row(DF1)[,j], j]
}
head(DF1)
p1 p2 of1 of2 newPrice1 newPrice2
1 1 11 1 2 2 13
2 2 12 1 2 3 14
3 3 13 1 2 4 15
4 4 14 1 2 5 16
5 5 15 1 2 6 17
6 6 16 1 2 7 18