我正在創建一些仿真數據。我需要創建家庭ID(H_ID)和個人ID(P_ID,在每個家庭中)。向量化循環
我發現了一種如何以矢量化的方式創建H_ID的方法。
N <- 50
### Household ID
# loop-for
set.seed(20110224)
H_ID <- vector("integer", N)
H_ID[1] <- 1
for (i in 2:N) if (runif(1) < .5) H_ID[i] <- H_ID[i-1]+1 else H_ID[i] <- H_ID[i-1]
print(H_ID)
# vectorised form
set.seed(20110224)
r <- c(0, runif(N-1))
H_ID <- cumsum(r < .5)
print(H_ID)
但我無法弄清楚如何以矢量化的方式創建P_ID。
### Person ID
# loop-for
P_ID <- vector("integer", N)
P_ID[1] <- 1
for (i in 2:N) if (H_ID[i] > H_ID[i-1]) P_ID[i] <- 1 else P_ID[i] <- P_ID[i-1]+1
print(cbind(H_ID, P_ID))
# vectorised form
# ???
我做了時間測試('N < - 2e6')。你的解決方案肯定是最快的。它比'lapply'解決方案快了約34倍。謝謝! – djhurio 2011-02-28 19:26:26