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

Javier Marcuzzi j@v|er@ruben@m@rcuzz| @end|ng |rom gm@||@com
Mie Jul 6 21:39:33 CEST 2022


Perdón, este es el código


n1 <-c(974.0, 938.1, 908.9, 884.3, 862.6, 843.2, 825.4)
alfa <-c(0.2642, 0.3754, 0.5014, 0.6273, 0.7380, 0.8250, 0.8875)
datos <- data.frame(n1,alfa)
datos
#creo indice
indices <- as.numeric(rownames(datos))
datos <- data.frame(indices, datos)
datos

valor <-1025
valorCalculado <- c()
for (i in datos$indices) {
  if(i == 1)
  {
    n1 <- datos[datos$indice == i, 2]
    alpha <- datos[datos$indice == i, 3]
    valor <- valor-(valor-n1)^alpha
    valorCalculado <-c(valor)
  }
  else
  {
   # indices    n1   alfa    =>     2    3
    n1 <- datos[datos$indice == i, 2]
    alpha <- datos[datos$indice == i, 3]
    
    valor <- valor-(valor-n1)^alpha
    valorCalculado <- c(valorCalculado, valor)
  }
}

datos <- data.frame(datos, valorCalculado)
datos

> El 6 jul. 2022, a las 10:31, Álvaro Hernández Vicente <alvarohv using um.es> escribió:
> 
> 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/> <http://www.qualityexcellence.es <http://www.qualityexcellence.es/>>
>> 
>> El mar, 5 jul 2022 a las 22:07, Andrés Hirigoyen
>> (<andreshirigoyen using gmail.com <mailto: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 <mailto: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/> <http://www.qualityexcellence.es <http://www.qualityexcellence.es/>>
>> 
>> El mar, 5 jul 2022 a las 21:47, Andrés Hirigoyen
>> (<andreshirigoyen using gmail.com <mailto: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 <mailto: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 <mailto: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 <mailto:R-help-es using r-project.org>
>>>> https://stat.ethz.ch/mailman/listinfo/r-help-es <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>
>>                <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 <https://www.researchgate.net/profile/Andres-Hirigoyen>>
>> 
>>                   -
>> 
>>                        [[alternative HTML version deleted]]
>> 
>>                _______________________________________________
>>                R-help-es mailing list
>>                R-help-es using r-project.org <mailto:R-help-es using r-project.org>
>>                https://stat.ethz.ch/mailman/listinfo/r-help-es <https://stat.ethz.ch/mailman/listinfo/r-help-es>
>> 
>> 
>> 
>>            -- 
>>            Saludos,
>>            Carlos Ortega
>>            www.qualityexcellence.es <http://www.qualityexcellence.es/> <http://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 <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 <https://www.researchgate.net/profile/Andres-Hirigoyen>>
>> 
>>         *
>> 
>> 
>> 
>>    -- 
>>    Saludos,
>>    Carlos Ortega
>>    www.qualityexcellence.es <http://www.qualityexcellence.es/> <http://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 <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 <https://www.researchgate.net/profile/Andres-Hirigoyen>>
>> 
>> *
>> 
>> 
>> _______________________________________________
>> R-help-es mailing list
>> R-help-es using r-project.org <mailto:R-help-es using r-project.org>
>> https://stat.ethz.ch/mailman/listinfo/r-help-es <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]]
> 
> _______________________________________________
> R-help-es mailing list
> R-help-es using r-project.org <mailto:R-help-es using r-project.org>
> https://stat.ethz.ch/mailman/listinfo/r-help-es <https://stat.ethz.ch/mailman/listinfo/r-help-es>

	[[alternative HTML version deleted]]



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