1

私は約 300 万の観測値を持つ非常に大きなデータ セットを使用しています。特定の要件を満たしている場合は、特定の観測値を調べて基本的に組み合わせたいと考えています。これを行うための for ループを以下に書きましたが、非常に非効率的です。適用関数などを使用して、これを改善できるより効率的な方法はありますか?

nobs <- nrow(acsdata)

for (i in 2:nobs){

  if (acsdata[i,6]==1 & acsdata[(i-1),6]==1) acsdata[(i-1),3]=2  

  if (acsdata[i,6]==1 & acsdata[(i-1),6]==1) acsdata[(i-1),21:30]=acsdata[(i-1),21:30]+acsdata[i,21:30]

  if (acsdata[i,6]==1 & acsdata[(i-1),6]==1) acsdata[(i),31]=1

}

どんな助けでも大歓迎です。ありがとう!

4

1 に答える 1

8

ベクトル化するだけです。ループや適用関数をいじらないでください。(未テスト) のようなもの:

to.fix <- which(acsdata[ 2:nobs, 6] == 1 & acsdata[ 1:(nobs - 1), 6] == 1)
acsdata[to.fix, 3] <- 2
acsdata[to.fix, 21:30] <- acsdata[to.fix, 21:30] + acsdata[to.fix + 1, 21:30]
acsdata[to.fix + 1, 31] <- 1
于 2012-12-19T22:01:55.963 に答える