Hola Manuel,
Podrias considerar la siguiente alternativa.
Un saludo,
Jorge
# datos
x <- c(7, 2, 8, 2, 99, 8, 2, 8, 5, 2, 8, 2, 2, 99, 2, 8, 2, 8, 5,
2, 99)
# a mano
R <- rle(x != 99)
cambios <- R$length[R$values]
k <- sum(x == 99) # cuantos 99
sujetos <- sapply(1:k, function(ii) c(rep(ii, cambios[ii]), NA))
valores <- split(x, unlist(sujetos))
sapply(valores, function(l) l[1:max(cambios)])
# haciendo lo anterior en una funcion
# se asume que el primer sujeto comienza con un numero diferente de 99
foo <- function(x){
R <- rle(x != 99)
cambios <- R$length[R$values]
k <- sum(x == 99)
sujetos <- sapply(1:k, function(ii) c(rep(ii, cambios[ii]), NA))
valores <- split(x, unlist(sujetos))
sapply(valores, function(l) l[1:max(cambios)])
}
# lo mismo pero chequeando si la ultima observacion es 99
convertir <- function(x){
n <- length(x)
if(x[n] == 99) res <- foo(x) # chequeando ultimo valor de x
else{
x[n+1] <- 99
res <- foo(x)
}
res
}
# ejemplo 1
convertir(x)
convertir(x[-length(x)]) # removiendo el ultimo 99
# ejemplo 2 con 8 sujetos (solo hay 7 numeros 99!)
y <- rpois(100, 10)
is.na(y) <- c(8, 28, 35, 54, 63, 78, 93)
y[is.na(y)] <- 99
y
convertir(y)
data.frame(convertir(y))
2011/8/31 <>
>
>
> Hola, tengo un vector con mas de 20000 elementos que representan
> secuencias de códigos (numéricos) de 40 sujetos.En el vector aparece el
> valor 99 para indicar que empieza la secuencia de otro sujeto. Un
> ejemplo de secuencia seria la siguiente:
>
> 7 2 8 2 99 8 2 8 5 2 8 2 2 99
> 2 8 2 8 5 2 99
>
> La idea seria construir un data frame en el que cada
> columna represente la secuencia de cada sujeto. Quedaría asi:
>
> 7 8 2
>
>
> 2 2 8
>
> 8 8 2
>
> 2 5 8
>
> 99 2 5
>
> 99 8 2
>
> 99 2 99
>
> 99 2 99
>
> Las
> secuencias de los sujetos tienen tamaños distintos. Para igualar las
> columnas habría que añadir el valor 99 (o cualquier otro distinto a los
> códigos).
>
> Alguna sugerencia?
>
> Saludos,
>
> Manuel
>
>
> [[alternative HTML version deleted]]
>
>
> _______________________________________________
> R-help-es mailing list
> R-help-es@r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>
>
[[alternative HTML version deleted]]