2

Rで大きなデータテーブルを操作していて、テーブル全体をループして、別の列の前の行の値に基づいて、特定の列の行の値を設定しようとしています。

このループを200K行のテーブルで実行しようとしていますが、移動速度が非常に遅くなっています。すべてのdata.tableの効率を利用しているわけではないのではないかと思いますが、どこで改善できるかわかりません。

私のコードは以下です。私のテーブルは「DATA」で、キーは列「x」と「y」です。すべての行をループして、列2の行の値が1でない場合にのみ、列6の行の値を1に設定しようとしています。列2の前の行の値と同じです。

setkey(DATA,x,y)
for (i in 2:nrow(DATA)) {

    if (DATA[i,2]!=DATA[i-1,2]){
        DATA[i, 6] = 1
    }

}

繰り返しますが、これは機能しますが、大きなテーブルの場合は非常に遅くなります。どんな助けでも大歓迎です-ありがとう!

4

2 に答える 2

7

データを見ずに、ここにスタブがあります(これは使用しませんdata.table):

DATA[c(0, diff(DATA[,2]))!=0, 6] <- 1

最初の行が「等しくない」と見なされる場合:

DATA[c(1, diff(DATA[,2]))!=0, 6] <- 1
于 2013-01-26T16:55:18.727 に答える
3

ループではなく、ベクトルを考えてください。

DATA[,6] <- c(0,as.numeric(diff(DATA[,2]) != 0))

他に何を入れるべきかわからないので、最初の行に0を入れましたが、より適切な場合は別の行に変更できます。

于 2013-01-26T16:55:24.867 に答える