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]]

