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