以下の操作を実現するためのより高速な方法を探しています。データセットには 100 万行を超える行が含まれていますが、タスクを説明するために簡単な例を提供しました --
To create the data table --
dt <- data.table(name=c("john","jill"), a1=c(1,4), a2=c(2,5), a3=c(3,6),
b1=c(10,40), b2=c(20,50), b3=c(30,60))
colGroups <- c("a","b") # Columns starting in "a", and in "b"
Original Dataset
-----------------------------------
name a1 a2 a3 b1 b2 b3
john 1 2 3 10 20 30
jill 4 5 6 40 50 60
上記のデータセットは、一意の名前ごとに 2 つの新しい行が追加され、各行で値が列のグループごとに個別に左にシフトされるように変換されます (この例では、a 列と b 列を使用しましたが、さらに多くの列があります)。
Transformed Dataset
-----------------------------------
name a1 a2 a3 b1 b2 b3
john 1 2 3 10 20 30 # First Row for John
john 2 3 0 20 30 0 # "a" values left shifted, "b" values left shifted
john 3 0 0 30 0 0 # Same as above, left-shifted again
jill 4 5 6 40 50 60 # Repeated for Jill
jill 5 6 0 50 60 0
jill 6 0 0 60 0 0
等々。私のデータセットは非常に大きいため、これを実装する効率的な方法があるかどうかを確認しようとしています。
前もって感謝します。