从不同的数据帧行获取数据

时间:2013-09-21 18:33:39

标签: r

我有一个大数据框。每行都有特定日期的数据。下一组列有股票价格。每列代表一个股票。然后我有偏移列,每个库存列一个。我必须用偏移量来抵消当前行。然后我将最后一组列中的第一组列中的价格(但现在使用偏移行)中的值设置为NA。

例如,第1行col 3中的值为1,所以我需要将第一行偏移1.这给了我第2行。我需要得到第2行中的价格p1,col 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

1 个答案:

答案 0 :(得分: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