[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