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 回答