Carlos, capaz no me explique bien, va de nuevo... Tengo un dataFrame con varias variables que describen Lotes (127), he creado un código que calcula nuevas variables, re codifica otras y ordenas otras tantas. Es muy laborioso correr ese código 127 veces por lo cual quería hacer un sentencia (del tipo if() o repeat()), para obtener al final todos los lotes procesados. Saludos y gracias por tan rápida respuesta El 30 de mayo de 2016, 11:06, Carlos Ortega <cof en qualityexcellence.es> escribió:> Hola, > > Puedes utilizar el código de Oliver utilizando la librería "broom" que > permite obtener los parámetros (coeficientes) y características del modelo > (null.deviance, AIC, BIC) en un cómodo data.frame > > El código sería algo así como esto. > > library(broom) > L <- list(L1, L2..., L120) > > ajuste <- function(L) { > g <- glm(y ~., data = L) > g_df <- tidy(g) #tidy es una función del paquete "broom" que > devuelve los coeficientes y sus errores. > return(g_df) > } > > fit <- apply(L, ajuste) > > > Saludos, > Carlos Ortega > www.qualityexcellence.es > > El 30 de mayo de 2016, 15:15, Andres Hirigoyen <andreshirigoyen en gmail.com> > escribió: > >> Oliver gracias por le pista! >> Es un poco mas complicado, el código tiene varios pasos incluidos calculo >> de nuevas variables con los betas del glm y otras vueltas. Necesitaría una >> sentencia que tome cada lote haga los cálculos por separado y luego los >> une >> en el dataframe de salida >> >> El 30 de mayo de 2016, 10:02, Olivier Nuñez <onunez en unex.es> escribió: >> >> > Mira lapply .... >> > >> > Si L= list(L1,L2,...,L120) es una lista de tus lotes >> > >> > ajuste <- function(L) glm(y~x,data=L) >> > fit=lapply(L1,ajuste) >> > >> > donde "fit" es la lista de 120 ajustes. >> > >> > Un saludo. Olivier >> > >> > ----- Mensaje original ----- >> > De: "Andres Hirigoyen" <andreshirigoyen en gmail.com> >> > Para: r-help-es en r-project.org >> > Enviados: Lunes, 30 de Mayo 2016 14:55:19 >> > Asunto: [R-es] Codigo >> > >> > Buenos días tengo una consulta sobre un código rutinario que quiero >> > ejecutar. >> > >> > Tengo 120 Lotes con un ID diferente (del C001 al C120) a cada uno de >> los >> > cuales debo efectuares un GLM y con los parámetros obtenidos calcular >> otras >> > variables para luego hacer gráficas, razón por la cual no puedo >> procesarlos >> > todos juntos. >> > Intente hacer una sentencia repeat() o con for() para que me ejecute de >> > forma individual cada lote y no tener que hacerlo a mano, pero no me >> > sale... >> > ¿¿Alguna idea?? >> > >> > [[alternative HTML version deleted]] >> > >> > _______________________________________________ >> > R-help-es mailing list >> > R-help-es en r-project.org >> > https://stat.ethz.ch/mailman/listinfo/r-help-es >> > >> >> [[alternative HTML version deleted]] >> >> _______________________________________________ >> R-help-es mailing list >> R-help-es en r-project.org >> https://stat.ethz.ch/mailman/listinfo/r-help-es >> > > > > -- > Saludos, > Carlos Ortega > www.qualityexcellence.es >[[alternative HTML version deleted]]
Hola Andrés,
Entonces todo esto lo puedes hacer con un bucle "for".
Entiendo que tienes unos datos del tipo:
Lote V1 V2 Vn
------- ------- ---------- --------
Lote_1 valor11 valor12.... valor1n
...
Lote_N valorN1 valorN2....valorNn
Y tras procesarlo lo conviertes en algo así como
Lote V1 V2 Vn Vn+1 VM
------- ------- ---------- -------- ----------- ----------
Lote_1 valor11 valor12.... valor1n valor1n+1..valor1M
...
Lote_N valorN1 valorN2....valorNn valorNn+1...valorNM
Lo que harías con un bucle es incluir en cada ciclo todas esas
transformaciones que haces ahora en pasos para un "Lote_i".
for (i in 1:nrow(conjunto_Inicial) {
conjunto_Inicial$Vn+1[i] <-
una_transformacion_en_fila_i_del_conjunto_Inicial_sobre_1_o_varias_vars
......
conjunto_Inicial$VM[i] <-
otra_transformacion_en_fila_i_del_conjunto_inicialsobre_1_o_varias_vars
}
El resultado del bucle será un conjunto_Final, con las nuevas columnas
añadidas o alguna existente transformada.
¿Es esto lo que buscabas?...
Gracias,
Carlos.
El 30 de mayo de 2016, 16:19, Andres Hirigoyen <andreshirigoyen en
gmail.com>
escribió:
> Carlos, capaz no me explique bien, va de nuevo...
> Tengo un dataFrame con varias variables que describen Lotes (127), he
> creado un código que calcula nuevas variables, re codifica otras y ordenas
> otras tantas. Es muy laborioso correr ese código 127 veces por lo cual
> quería hacer un sentencia (del tipo if() o repeat()), para obtener al final
> todos los lotes procesados.
>
> Saludos y gracias por tan rápida respuesta
>
>
> El 30 de mayo de 2016, 11:06, Carlos Ortega <cof en
qualityexcellence.es>
> escribió:
>
>> Hola,
>>
>> Puedes utilizar el código de Oliver utilizando la librería
"broom" que
>> permite obtener los parámetros (coeficientes) y características del
modelo
>> (null.deviance, AIC, BIC) en un cómodo data.frame
>>
>> El código sería algo así como esto.
>>
>> library(broom)
>> L <- list(L1, L2..., L120)
>>
>> ajuste <- function(L) {
>> g <- glm(y ~., data = L)
>> g_df <- tidy(g) #tidy es una función del paquete
"broom" que
>> devuelve los coeficientes y sus errores.
>> return(g_df)
>> }
>>
>> fit <- apply(L, ajuste)
>>
>>
>> Saludos,
>> Carlos Ortega
>> www.qualityexcellence.es
>>
>> El 30 de mayo de 2016, 15:15, Andres Hirigoyen <andreshirigoyen en
gmail.com
>> > escribió:
>>
>>> Oliver gracias por le pista!
>>> Es un poco mas complicado, el código tiene varios pasos incluidos
calculo
>>> de nuevas variables con los betas del glm y otras vueltas.
Necesitaría
>>> una
>>> sentencia que tome cada lote haga los cálculos por separado y luego
los
>>> une
>>> en el dataframe de salida
>>>
>>> El 30 de mayo de 2016, 10:02, Olivier Nuñez <onunez en
unex.es> escribió:
>>>
>>> > Mira lapply ....
>>> >
>>> > Si L= list(L1,L2,...,L120) es una lista de tus lotes
>>> >
>>> > ajuste <- function(L) glm(y~x,data=L)
>>> > fit=lapply(L1,ajuste)
>>> >
>>> > donde "fit" es la lista de 120 ajustes.
>>> >
>>> > Un saludo. Olivier
>>> >
>>> > ----- Mensaje original -----
>>> > De: "Andres Hirigoyen" <andreshirigoyen en
gmail.com>
>>> > Para: r-help-es en r-project.org
>>> > Enviados: Lunes, 30 de Mayo 2016 14:55:19
>>> > Asunto: [R-es] Codigo
>>> >
>>> > Buenos días tengo una consulta sobre un código rutinario que
quiero
>>> > ejecutar.
>>> >
>>> > Tengo 120 Lotes con un ID diferente (del C001 al C120) a cada
uno de
>>> los
>>> > cuales debo efectuares un GLM y con los parámetros obtenidos
calcular
>>> otras
>>> > variables para luego hacer gráficas, razón por la cual no
puedo
>>> procesarlos
>>> > todos juntos.
>>> > Intente hacer una sentencia repeat() o con for() para que me
ejecute de
>>> > forma individual cada lote y no tener que hacerlo a mano, pero
no me
>>> > sale...
>>> > ¿¿Alguna idea??
>>> >
>>> > [[alternative HTML version deleted]]
>>> >
>>> > _______________________________________________
>>> > R-help-es mailing list
>>> > R-help-es en r-project.org
>>> > https://stat.ethz.ch/mailman/listinfo/r-help-es
>>> >
>>>
>>> [[alternative HTML version deleted]]
>>>
>>> _______________________________________________
>>> R-help-es mailing list
>>> R-help-es en r-project.org
>>> https://stat.ethz.ch/mailman/listinfo/r-help-es
>>>
>>
>>
>>
>> --
>> Saludos,
>> Carlos Ortega
>> www.qualityexcellence.es
>>
>
>
--
Saludos,
Carlos Ortega
www.qualityexcellence.es
[[alternative HTML version deleted]]
Sí llamamos DF al data.frame que tienes y DF$ID es la variable con los ID de
los lotes puede hacer con el código de que dispones lo siguiente (es equivalente
a un bucle for):
L <- unique(DF$ID)
Hay que tener cuidado que ID no sea un factor, si lo es
L <- unique(as.character(DF$ID))
Resultados <- lapply(L, function(x){
X <- subset(DF, ID == x)
Aquí vendrían las operaciones que quieras hacer con X (el data.frame para un
solo ID o, como lo llamas, lote)
hasta que obtienes el objeto que persigues, al que llamaré Z.
Y, por último
return(Z)
})
names(Resultados) <- L
Esta última instrucción te permite conocer a que lote corresponden los
resultados.
Resultados es una lista y puedes ver uno de ellos con
Resultados[["C001"]] (por ejemplo).
Espero haber sido de ayuda.
-----Mensaje original-----
De: R-help-es [mailto:r-help-es-bounces en r-project.org] En nombre de Andres
Hirigoyen
Enviado el: lunes, 30 de mayo de 2016 16:20
Para: Carlos Ortega
CC: Lista R
Asunto: Re: [R-es] Codigo
Carlos, capaz no me explique bien, va de nuevo...
Tengo un dataFrame con varias variables que describen Lotes (127), he creado un
código que calcula nuevas variables, re codifica otras y ordenas otras tantas.
Es muy laborioso correr ese código 127 veces por lo cual quería hacer un
sentencia (del tipo if() o repeat()), para obtener al final todos los lotes
procesados.
Saludos y gracias por tan rápida respuesta
El 30 de mayo de 2016, 11:06, Carlos Ortega <cof en qualityexcellence.es>
escribió:
> Hola,
>
> Puedes utilizar el código de Oliver utilizando la librería
"broom" que
> permite obtener los parámetros (coeficientes) y características del
> modelo (null.deviance, AIC, BIC) en un cómodo data.frame
>
> El código sería algo así como esto.
>
> library(broom)
> L <- list(L1, L2..., L120)
>
> ajuste <- function(L) {
> g <- glm(y ~., data = L)
> g_df <- tidy(g) #tidy es una función del paquete
"broom" que
> devuelve los coeficientes y sus errores.
> return(g_df)
> }
>
> fit <- apply(L, ajuste)
>
>
> Saludos,
> Carlos Ortega
> www.qualityexcellence.es
>
> El 30 de mayo de 2016, 15:15, Andres Hirigoyen
> <andreshirigoyen en gmail.com>
> escribió:
>
>> Oliver gracias por le pista!
>> Es un poco mas complicado, el código tiene varios pasos incluidos
>> calculo de nuevas variables con los betas del glm y otras vueltas.
>> Necesitaría una sentencia que tome cada lote haga los cálculos por
>> separado y luego los une en el dataframe de salida
>>
>> El 30 de mayo de 2016, 10:02, Olivier Nuñez <onunez en unex.es>
escribió:
>>
>> > Mira lapply ....
>> >
>> > Si L= list(L1,L2,...,L120) es una lista de tus lotes
>> >
>> > ajuste <- function(L) glm(y~x,data=L)
>> > fit=lapply(L1,ajuste)
>> >
>> > donde "fit" es la lista de 120 ajustes.
>> >
>> > Un saludo. Olivier
>> >
>> > ----- Mensaje original -----
>> > De: "Andres Hirigoyen" <andreshirigoyen en
gmail.com>
>> > Para: r-help-es en r-project.org
>> > Enviados: Lunes, 30 de Mayo 2016 14:55:19
>> > Asunto: [R-es] Codigo
>> >
>> > Buenos días tengo una consulta sobre un código rutinario que
quiero
>> > ejecutar.
>> >
>> > Tengo 120 Lotes con un ID diferente (del C001 al C120) a cada uno
>> > de
>> los
>> > cuales debo efectuares un GLM y con los parámetros obtenidos
>> > calcular
>> otras
>> > variables para luego hacer gráficas, razón por la cual no puedo
>> procesarlos
>> > todos juntos.
>> > Intente hacer una sentencia repeat() o con for() para que me
>> > ejecute de forma individual cada lote y no tener que hacerlo a
>> > mano, pero no me sale...
>> > ¿¿Alguna idea??
>> >
>> > [[alternative HTML version deleted]]
>> >
>> > _______________________________________________
>> > R-help-es mailing list
>> > R-help-es en r-project.org
>> > https://stat.ethz.ch/mailman/listinfo/r-help-es
>> >
>>
>> [[alternative HTML version deleted]]
>>
>> _______________________________________________
>> R-help-es mailing list
>> R-help-es en r-project.org
>> https://stat.ethz.ch/mailman/listinfo/r-help-es
>>
>
>
>
> --
> Saludos,
> Carlos Ortega
> www.qualityexcellence.es
>
[[alternative HTML version deleted]]
_______________________________________________
R-help-es mailing list
R-help-es en r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es
Pruebo y confirmo. MUCHAS GRACIAS A TODOS!!!!!!!!!!!! El 30 de mayo de 2016, 11:36, Bartolomé Marcos, José Antonio < josea.bartolome en mineco.es> escribió:> Sí llamamos DF al data.frame que tienes y DF$ID es la variable con los ID > de los lotes puede hacer con el código de que dispones lo siguiente (es > equivalente a un bucle for): > > L <- unique(DF$ID) > Hay que tener cuidado que ID no sea un factor, si lo es > L <- unique(as.character(DF$ID)) > > Resultados <- lapply(L, function(x){ > > X <- subset(DF, ID == x) > > Aquí vendrían las operaciones que quieras hacer con X (el > data.frame para un solo ID o, como lo llamas, lote) > hasta que obtienes el objeto que persigues, al que llamaré Z. > > Y, por último > > return(Z) > > > }) > > names(Resultados) <- L > > Esta última instrucción te permite conocer a que lote corresponden los > resultados. > > Resultados es una lista y puedes ver uno de ellos con Resultados[["C001"]] > (por ejemplo). > > Espero haber sido de ayuda. > > > -----Mensaje original----- > De: R-help-es [mailto:r-help-es-bounces en r-project.org] En nombre de > Andres Hirigoyen > Enviado el: lunes, 30 de mayo de 2016 16:20 > Para: Carlos Ortega > CC: Lista R > Asunto: Re: [R-es] Codigo > > Carlos, capaz no me explique bien, va de nuevo... > Tengo un dataFrame con varias variables que describen Lotes (127), he > creado un código que calcula nuevas variables, re codifica otras y ordenas > otras tantas. Es muy laborioso correr ese código 127 veces por lo cual > quería hacer un sentencia (del tipo if() o repeat()), para obtener al final > todos los lotes procesados. > > Saludos y gracias por tan rápida respuesta > > > El 30 de mayo de 2016, 11:06, Carlos Ortega <cof en qualityexcellence.es> > escribió: > > > Hola, > > > > Puedes utilizar el código de Oliver utilizando la librería "broom" que > > permite obtener los parámetros (coeficientes) y características del > > modelo (null.deviance, AIC, BIC) en un cómodo data.frame > > > > El código sería algo así como esto. > > > > library(broom) > > L <- list(L1, L2..., L120) > > > > ajuste <- function(L) { > > g <- glm(y ~., data = L) > > g_df <- tidy(g) #tidy es una función del paquete "broom" que > > devuelve los coeficientes y sus errores. > > return(g_df) > > } > > > > fit <- apply(L, ajuste) > > > > > > Saludos, > > Carlos Ortega > > www.qualityexcellence.es > > > > El 30 de mayo de 2016, 15:15, Andres Hirigoyen > > <andreshirigoyen en gmail.com> > > escribió: > > > >> Oliver gracias por le pista! > >> Es un poco mas complicado, el código tiene varios pasos incluidos > >> calculo de nuevas variables con los betas del glm y otras vueltas. > >> Necesitaría una sentencia que tome cada lote haga los cálculos por > >> separado y luego los une en el dataframe de salida > >> > >> El 30 de mayo de 2016, 10:02, Olivier Nuñez <onunez en unex.es> escribió: > >> > >> > Mira lapply .... > >> > > >> > Si L= list(L1,L2,...,L120) es una lista de tus lotes > >> > > >> > ajuste <- function(L) glm(y~x,data=L) > >> > fit=lapply(L1,ajuste) > >> > > >> > donde "fit" es la lista de 120 ajustes. > >> > > >> > Un saludo. Olivier > >> > > >> > ----- Mensaje original ----- > >> > De: "Andres Hirigoyen" <andreshirigoyen en gmail.com> > >> > Para: r-help-es en r-project.org > >> > Enviados: Lunes, 30 de Mayo 2016 14:55:19 > >> > Asunto: [R-es] Codigo > >> > > >> > Buenos días tengo una consulta sobre un código rutinario que quiero > >> > ejecutar. > >> > > >> > Tengo 120 Lotes con un ID diferente (del C001 al C120) a cada uno > >> > de > >> los > >> > cuales debo efectuares un GLM y con los parámetros obtenidos > >> > calcular > >> otras > >> > variables para luego hacer gráficas, razón por la cual no puedo > >> procesarlos > >> > todos juntos. > >> > Intente hacer una sentencia repeat() o con for() para que me > >> > ejecute de forma individual cada lote y no tener que hacerlo a > >> > mano, pero no me sale... > >> > ¿¿Alguna idea?? > >> > > >> > [[alternative HTML version deleted]] > >> > > >> > _______________________________________________ > >> > R-help-es mailing list > >> > R-help-es en r-project.org > >> > https://stat.ethz.ch/mailman/listinfo/r-help-es > >> > > >> > >> [[alternative HTML version deleted]] > >> > >> _______________________________________________ > >> R-help-es mailing list > >> R-help-es en r-project.org > >> https://stat.ethz.ch/mailman/listinfo/r-help-es > >> > > > > > > > > -- > > Saludos, > > Carlos Ortega > > www.qualityexcellence.es > > > > [[alternative HTML version deleted]] > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >[[alternative HTML version deleted]]