[R-es] Ayuda con Función nueva variable

Álvaro Hernández Vicente @|v@rohv @end|ng |rom um@e@
Mie Jul 6 15:31:39 CEST 2022


Hola, Andrés:

Con la mezcla que has hecho de variables de distintos ejemplos no se 
entiende mucho lo que necesitas. Si la fórmula que tienes en tu excel es 
exactamente lo que quieres replicar en R, entonces puedes hacerlo con

dd <- tibble::tribble(~N1,  ~alfa,    ~NN,                       NA,     
NA,   1025,                       974, 0.2642, 1022.2, 
                       938.1, 0.3754, 1016.9,                       
908.9, 0.5014, 1006.4,                       884.3, 0.6273,  986.1, 
                       862.6,  0.738,  951.1,                       
843.2,  0.825,  903.5,                       825.4, 0.8875,  855.7) 
dd$nn_new <- 1025 for(i in 2:nrow(dd)){   dd$nn_new[i] <- (dd$nn_new[i - 
1] - (dd$nn_new[i - 1] - dd$N1[i])^dd$alfa[i]) }

Un saludo,
Álvaro


On 7/6/22 14:39, Andrés Hirigoyen wrote:
> Hola Javier y Carlos, adjunto un ejemplo en excel para explicarme 
> mejor, sigo sin conseguir el objetivo.
> Carlos, el valor inicial se lo doy como input.
> Saludos!
>
> El mar, 5 jul 2022 a la(s) 17:16, Carlos Ortega 
> (cof using qualityexcellence.es) escribió:
>
>     Hola,
>
>     Bueno, puedes combinar varios lags en la nueva variable...
>
>     > library(dplyr)
>     > myiris <- iris
>     > alfa <- 1.7
>     > expo <- 0.263
>     > myiris %>%
>     +   mutate( mynewSL = lag(Sepal.Length) * 2) %>%
>     +   mutate( *mynewSLcompleja* =
>     lag(Sepal.Length)*(lag(Sepal.Length)-alfa)^expo) %>%
>     +   relocate( mynewSL, .before = Sepal.Width) %>%
>     +   relocate( mynewSLcompleja, .before = mynewSL) %>%
>     +   head()
>       Sepal.Length *mynewSLcompleja *mynewSL Sepal.Width Petal.Length
>     Petal.Width Species
>     1 *5.1 *            NA      NA         3.5          1.4        
>     0.2  setosa
>     2          4.9 7.036378    10.2         3.0          1.4        
>     0.2  setosa
>     3          4.7        6.653506     9.8         3.2  1.3        
>     0.2  setosa
>     4          4.6        6.274523     9.4         3.1  1.5        
>     0.2  setosa
>     5          5.0        6.086512     9.2         3.6  1.4        
>     0.2  setosa
>     6          5.4        6.844460    10.0         3.9  1.7        
>     0.4  setosa
>
>     Gracias,
>     Carlos Ortega
>     www.qualityexcellence.es <http://www.qualityexcellence.es>
>
>     El mar, 5 jul 2022 a las 22:07, Andrés Hirigoyen
>     (<andreshirigoyen using gmail.com>) escribió:
>
>         Gracias Carlos.
>         Siguiendo tu ejemplo, en mi nueva variable el valor de la
>         observación 2 (*10.2*) es el valor que entra para calcular el
>         valor de la observación 3 (*4.7 y 10.2*)
>
>         NNn+1=10.2*(10.2-4.7)^0.263
>         Saludos
>
>         El mar, 5 jul 2022 a la(s) 16:57, Carlos Ortega
>         (cof using qualityexcellence.es) escribió:
>
>             Hola,
>
>             No entiendo muy bien lo que comentas de que aparecen
>             nuevas variables.
>             De esta forma calculo un nuevo "Sepal.Length" que es el
>             valor anterior multiplicado por 2.
>
>             > myiris %>%
>             +   mutate( mynewSL = lag(Sepal.Length) * 2) %>%
>             +   relocate( mynewSL, .before = Sepal.Width) %>%
>             +   head()
>               Sepal.Length mynewSL Sepal.Width Petal.Length
>             Petal.Width Species
>             1 *5.1 *  NA         3.5          1.4     0.2  setosa
>             2          4.9 *10.2 *     3.0          1.4         0.2
>              setosa
>             3          4.7     9.8         3.2          1.3       0.2
>              setosa
>             4          4.6     9.4         3.1          1.5       0.2
>              setosa
>             5          5.0     9.2         3.6          1.4       0.2
>              setosa
>             6          5.4    10.0         3.9          1.7       0.4
>              setosa
>
>             Saludos,
>             Carlos Ortega
>             www.qualityexcellence.es <http://www.qualityexcellence.es>
>
>             El mar, 5 jul 2022 a las 21:47, Andrés Hirigoyen
>             (<andreshirigoyen using gmail.com>) escribió:
>
>                 Hola Javier, gracias por tu respuesta.
>                 Hice algo similar a lo que propones con la función
>                 lag(), que retarda los
>                 valores de la variable. El tema que cada vez que lo
>                 calculo o me
>                 sobreescribe o me genera una nueva columna y termino
>                 con varias columnas
>                 nuevas.
>
>                 El mar, 5 jul 2022 a la(s) 16:36, Javier Marcuzzi (
>                 javier.ruben.marcuzzi using gmail.com) escribió:
>
>                 > Estimado Andrés Hirigoyen
>                 >
>                 > Es bastante complejo pero puede resultar simple.
>                 > Todo depende de como trabajes con los datos, en una
>                 oportunidad en esa
>                 > lista me ayudaron utilizando do.call
>                 >
>                 > Yo intentaría primero modificando los datos, por
>                 ejemplo al data.frame
>                 > original le tomo y realizo un contador, que inicie
>                 en 0 e incremente en 1,
>                 > a este resultado se lo agrego en una nueva columna
>                 al mismo data.frame.
>                 >
>                 > Suponiendo que en los datos, cada registro tiene una
>                 numeración que inicia
>                 > en 1, la columna agregada comienza en 0, por lo que
>                 puedo realizar una
>                 > búsqueda de una columna sobre la otra que está
>                 corrida justo un número,
>                 > pero en la misma fila de datos, lo que facilita el
>                 recorrido.
>                 >
>                 > Es una idea, seguramente hay formas más eficientes,
>                 pero esta es simple de
>                 > entender.
>                 >
>                 > Javier Rubén Marcuzzi
>                 >
>                 >
>                 > > El 5 jul. 2022, a las 15:59, Andrés Hirigoyen
>                 <andreshirigoyen using gmail.com>
>                 > escribió:
>                 > >
>                 > > Buenas tardes.
>                 > > Necesito ayuda para hacer una función o un bucle
>                 que me permita calcular
>                 > > una nueva variable empleando el valor anterior de
>                 la misma (para la
>                 > > observación anterior). En un dataframe de varias
>                 columnas.
>                 > >
>                 > > Por ejemplo:
>                 > > Para calcular el valor de NN para la observación
>                 2, emplea el NN de la
>                 > > observación 1, para el NN de la tercera emplea el
>                 NN de la segunda y
>                 > > así hasta todas las observaciones.
>                 > > Algo así:
>                 > > NN(i-1)<-valor inicial
>                 > > NNi=NN(i-1)*(NN(i-1)-Alfa)^0.263
>                 > > NNi+1=NN(i)*(NN(i)-Alfa)^0.263...
>                 > >
>                 > > NNn+1=NN(n)*(NN(n)-Alfa)^0.263
>                 > > He intentado varias cosas pero no tuve suerte.
>                 Desde ya muchas gracias
>                 > > --
>                 > >
>                 > >
>                 > >   -
>                 > >
>                 > >       [[alternative HTML version deleted]]
>                 > >
>                 > > _______________________________________________
>                 > > R-help-es mailing list
>                 > > R-help-es using r-project.org
>                 > > https://stat.ethz.ch/mailman/listinfo/r-help-es
>                 >
>                 >
>
>                 -- 
>                  *Dr. **Andrés Hirigoyen*
>                 *Ing. Agr. **(MSc)*
>                 * Prof. Ciencias Biológicas*
>                 Scholar Andrés
>                 <https://scholar.google.com/citations?hl=es&user=ubpY7s4AAAAJ&view_op=list_works&sortby=pubdate
>                 <https://scholar.google.com/citations?hl=es&user=ubpY7s4AAAAJ&view_op=list_works&sortby=pubdate>>
>                 Researchgate Andrés
>                 <https://www.researchgate.net/profile/Andres-Hirigoyen>
>
>                    -
>
>                         [[alternative HTML version deleted]]
>
>                 _______________________________________________
>                 R-help-es mailing list
>                 R-help-es using r-project.org
>                 https://stat.ethz.ch/mailman/listinfo/r-help-es
>
>
>
>             -- 
>             Saludos,
>             Carlos Ortega
>             www.qualityexcellence.es <http://www.qualityexcellence.es>
>
>
>
>         -- 
>         */Dr. /**/Andrés Hirigoyen/*
>         */Ing. Agr. /**/(MSc)/*
>         */ Prof. Ciencias Biológicas/*
>         Scholar Andrés
>         <https://scholar.google.com/citations?hl=es&user=ubpY7s4AAAAJ&view_op=list_works&sortby=pubdate>
>         Researchgate Andrés
>         <https://www.researchgate.net/profile/Andres-Hirigoyen>
>
>          *
>
>
>
>     -- 
>     Saludos,
>     Carlos Ortega
>     www.qualityexcellence.es <http://www.qualityexcellence.es>
>
>
>
> -- 
> */Dr. /**/Andrés Hirigoyen/*
> */Ing. Agr. /**/(MSc)/*
> */ Prof. Ciencias Biológicas/*
> Scholar Andrés 
> <https://scholar.google.com/citations?hl=es&user=ubpY7s4AAAAJ&view_op=list_works&sortby=pubdate>
> Researchgate Andrés 
> <https://www.researchgate.net/profile/Andres-Hirigoyen>
>
>  *
>
>
> _______________________________________________
> R-help-es mailing list
> R-help-es using r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es

-- 
Álvaro Hernández Vicente
Investigador predoctoral (FPU-UM).
Grupo de Investigación Cardiología Clínica y Experimental.
Departamento de Medicina Interna.
Universidad de Murcia, Murcia, Spain.

Edif. LAIB/Departamental, despacho 2.57.
Campus de Ciencias de la Salud, Universidad de Murcia.
Avenida Buenavista, s/n, 30120, El Palmar, Murcia.

	[[alternative HTML version deleted]]



Más información sobre la lista de distribución R-help-es