Hola Estoy cometiendo un error con tapply (lógicamente acepto cualquier otra forma para mi problema). Prepare el siguiente código para copiar y pegar, donde describo los datos y mi problema, creo que es la forma más fácil de explicarme. # primero cargo los datos para explicar el problema individuo <- c(''a'', ''b'', ''c'', ''c'',''c'') n_accion <- c(1,1,1,2,3) # numero de accion en el individio, primera, segunda, tercera, ... inicio <-c(0,0,0,0,0) # son los días desde que comienza el protocolo d_inicio <-c(2,5,5,9,12) # son los dias desde el inicio al dia que se produce la acción datos <- data.frame(individuo, n_accion, inicio, d_inicio) datos quiero <- c(2,5,5,4,3) # son los dias entre las acciónes susesivas, pero en la primera es desde el inicio datos_quiero <- data.frame(individuo, n_accion, inicio, d_inicio, quiero) datos_quiero # una forma de calcular los datos que quiero es la siguiente (yo_funca) yo_funca <- ifelse (n_accion >1, (d_inicio-d_inicio[n_accion+1]), d_inicio) # como tengo numeradas las acciónes tomo el valor de d_inicio para la acción siquiente n_accion + 1 ver <- data.frame(datos_quiero, yo_funca) ver # # Ahora el problema # # # en este ejemplo solo tengo individuos (a,b,c) y no hay acciónes repetidas mayores a 1 # lógicamente en los datos reales tengo muchos individuos con el mismo n_accion # por tal motivo pense en crear un conteo utilizando tapply # pero hay un error en lo siguiente "conteo <- with ..." conteo <- with(ver, tapply(n_accion, individuo, function(x){ conteo <- ifelse (n_accion >1, (n_accion - n_accion[n_accion+1]), n_accion) yo_funca })) ver$Conteo <- do.call(c, conteo) ver # ¿alguien puede ayudarme? O alguna otra forma de realizar lo mismo conteo [[alternative HTML version deleted]]
Hola Javier, Podrias intentar # esta funcion toma un vector x # -- si x tiene longitud mayor a uno, reporta el # primer elemento y la diferencia entre los demas # si la longitud es uno, reporta x foo <- function(x){ if(length(x) > 1) res <- c(x[1], diff(x)) else res <- x res } out <- ave(d_inicio, list(individuo), FUN = foo) out ver$out <- out ver Un saludo, Jorge 2011/10/9 Marcuzzi, Javier Rubén <>> Hola > > Estoy cometiendo un error con tapply (lógicamente acepto cualquier otra > forma para mi problema). > Prepare el siguiente código para copiar y pegar, donde describo los datos y > mi problema, creo que es la forma más fácil de explicarme. > > # primero cargo los datos para explicar el problema > individuo <- c(''a'', ''b'', ''c'', ''c'',''c'') > n_accion <- c(1,1,1,2,3) # numero de accion en el individio, > primera, segunda, tercera, ... > inicio <-c(0,0,0,0,0) # son los días desde que comienza el > protocolo > d_inicio <-c(2,5,5,9,12) # son los dias desde el inicio al dia que > se produce la acción > datos <- data.frame(individuo, n_accion, inicio, d_inicio) > datos > quiero <- c(2,5,5,4,3) # son los dias entre las acciónes > susesivas, pero en la primera es desde el inicio > datos_quiero <- data.frame(individuo, n_accion, inicio, d_inicio, quiero) > datos_quiero > # una forma de calcular los datos que quiero es la siguiente (yo_funca) > yo_funca <- ifelse (n_accion >1, (d_inicio-d_inicio[n_accion+1]), d_inicio) > # como tengo numeradas las acciónes tomo el valor de d_inicio para la > acción siquiente n_accion + 1 > ver <- data.frame(datos_quiero, yo_funca) > ver > # > # Ahora el problema > # > # > # en este ejemplo solo tengo individuos (a,b,c) y no hay acciónes repetidas > mayores a 1 > # lógicamente en los datos reales tengo muchos individuos con el mismo > n_accion > # por tal motivo pense en crear un conteo utilizando tapply > # pero hay un error en lo siguiente "conteo <- with ..." > conteo <- with(ver, tapply(n_accion, individuo, function(x){ > conteo <- ifelse (n_accion >1, (n_accion - n_accion[n_accion+1]), > n_accion) > yo_funca > })) > ver$Conteo <- do.call(c, conteo) > ver > # ¿alguien puede ayudarme? O alguna otra forma de realizar lo mismo > conteo > [[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]]
Jorge Y así de fácil lo resuelve, y bueno, el que sabe sabe. Muchas gracias. Javier From: Jorge I Velez Sent: Sunday, October 09, 2011 11:58 PM To: Marcuzzi, Javier Rubén Cc: r-help-es@r-project.org Subject: Re: [R-es] tapply Hola Javier, Podrias intentar # esta funcion toma un vector x # -- si x tiene longitud mayor a uno, reporta el # primer elemento y la diferencia entre los demas # si la longitud es uno, reporta x foo <- function(x){ if(length(x) > 1) res <- c(x[1], diff(x)) else res <- x res } out <- ave(d_inicio, list(individuo), FUN = foo) out ver$out <- out ver Un saludo, Jorge 2011/10/9 Marcuzzi, Javier Rubén <> Hola Estoy cometiendo un error con tapply (lógicamente acepto cualquier otra forma para mi problema). Prepare el siguiente código para copiar y pegar, donde describo los datos y mi problema, creo que es la forma más fácil de explicarme. # primero cargo los datos para explicar el problema individuo <- c(''a'', ''b'', ''c'', ''c'',''c'') n_accion <- c(1,1,1,2,3) # numero de accion en el individio, primera, segunda, tercera, ... inicio <-c(0,0,0,0,0) # son los días desde que comienza el protocolo d_inicio <-c(2,5,5,9,12) # son los dias desde el inicio al dia que se produce la acción datos <- data.frame(individuo, n_accion, inicio, d_inicio) datos quiero <- c(2,5,5,4,3) # son los dias entre las acciónes susesivas, pero en la primera es desde el inicio datos_quiero <- data.frame(individuo, n_accion, inicio, d_inicio, quiero) datos_quiero # una forma de calcular los datos que quiero es la siguiente (yo_funca) yo_funca <- ifelse (n_accion >1, (d_inicio-d_inicio[n_accion+1]), d_inicio) # como tengo numeradas las acciónes tomo el valor de d_inicio para la acción siquiente n_accion + 1 ver <- data.frame(datos_quiero, yo_funca) ver # # Ahora el problema # # # en este ejemplo solo tengo individuos (a,b,c) y no hay acciónes repetidas mayores a 1 # lógicamente en los datos reales tengo muchos individuos con el mismo n_accion # por tal motivo pense en crear un conteo utilizando tapply # pero hay un error en lo siguiente "conteo <- with ..." conteo <- with(ver, tapply(n_accion, individuo, function(x){ conteo <- ifelse (n_accion >1, (n_accion - n_accion[n_accion+1]), n_accion) yo_funca })) ver$Conteo <- do.call(c, conteo) ver # ¿alguien puede ayudarme? O alguna otra forma de realizar lo mismo conteo [[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]]