Como posso classificar as observações no grupo mais rapidamente?
Eu tenho um problema muito simples, mas provavelmente não estou pensando em vetor suficiente para resolvê-lo com eficiência. Tentei duas abordagens diferentes e elas estão em loop em dois computadores diferentes há muito tempo. Eu gostaria de poder dizer que a competição tornou mais emocionante, mas ... b
rank observações no grupoTenho dados longos (muitas linhas por pessoa, uma linha por pessoa-observação) e basicamente quero uma variável, que me diga com que frequência a pessoa já foi observad
Tenho as duas primeiras colunas e quero oterceir 1
person wave obs
pers1 1999 1
pers1 2000 2
pers1 2003 3
pers2 1998 1
pers2 2001 2
Agora estou usando duas abordagens em loop. Ambos são terrivelmente lentos (150 mil linhas). Tenho certeza de que estou perdendo alguma coisa, mas minhas consultas de pesquisa ainda não me ajudaram (difícil definir o problema).
Obrigado por qualquer indicação!
# ordered dataset by persnr and year of observation
person.obs <- person.obs[order(person.obs$PERSNR,person.obs$wave) , ]
person.obs$n.obs = 0
# first approach: loop through people and assign range
unp = unique(person.obs$PERSNR)
unplength = length(unp)
for(i in 1:unplength) {
print(unp[i])
person.obs[which(person.obs$PERSNR==unp[i]),]$n.obs =
1:length(person.obs[which(person.obs$PERSNR==unp[i]),]$n.obs)
i=i+1
gc()
}
# second approach: loop through rows and reset counter at new person
pnr = 0
for(i in 1:length(person.obs[,2])) {
if(pnr!=person.obs[i,]$PERSNR) { pnr = person.obs[i,]$PERSNR
e = 0
}
e=e+1
person.obs[i,]$n.obs = e
i=i+1
gc()
}