大きなデータフレームがあります。各行には、特定の日付のデータがあります。次の列グループには株価があります。各列は 1 つの株式を表します。次に、在庫列ごとに 1 つのオフセット列があります。現在の行をオフセット量だけオフセットする必要があります。次に、列の最初のグループで見つかった価格 (ただし、現在はオフセット行を使用) を列の最後のグループに配置します。これは NA として始まります。
たとえば、行 1、列 3 の値は 1 であるため、最初の行を 1 オフセットする必要があります。これにより、行 2 が得られます。行 2、列 1 にある価格 p1 を取得する必要があります。値は 2 です。値 2 は行 1、列 5 に配置されます。
理論的には二重ループで問題を解決しましたが、コードはどうしようもなく遅くなりました。ループを1つ解消することができました。誰かが残りのループをなくすのを手伝ってくれませんか?
以下は、私のコードと、コード実行前後のデータ フレームです。サンプルでは、日付は不要なので省略しています。
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