0

我有一个大数据框。每行都有特定日期的数据。下一组列有股票价格。每列代表一只股票。然后我有偏移列,每个库存列一个。我必须将当前行偏移量。然后我将在第一组列(但现在使用偏移行)中找到的价格放在最后一组列中,以 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
4

1 回答 1

0
DF1$np1 <- DF1$p1[seq_along(DF1$p1) + DF1$of1]
DF1$np2 <- DF1$p2[seq_along(DF1$p2) + DF1$of2]

identical(DF1$np1, DF1$newPrice1)
#[1] TRUE

identical(DF1$np2, DF1$newPrice2)
#[1] TRUE
于 2013-09-21T18:58:46.380 回答