¿Cómo promedio variables por fila?

publicado por: Anonymous

Quiero promediar las filas en dos columnas diferentes (TempA y TempB) y almacenar el resultado en una nueva variable.

TempA     humedad    TemB

20          52      22
42          35      25 
NA          62      28
22          60      32
18          85      NA #Para los casos NA, quisiera que se conservara el 
valor registrado sin promediar 

De tal manera que el resultado sea:

TempA     humedad    TemB     TempC

20          52      22         21
42          35      25         33.5
NA          62      28         28
22          60      32         27
18          85      NA         18

solución

Asumiendo que tus datos se llaman datos

datos <- structure(list(TempA = c(20, 42, NA, 22, 18), 
                        humedad = c(52, 35, 62, 60, 85), 
                        TempB = c(22, 25, 28, 32, NA)), 
                        class = "data.frame", 
                        row.names = c(NA, -5L))

datos$TempC <- apply(datos[ ,c(1,3)], 1, mean, na.rm = TRUE)

Explicación

apply aplica una función a una matriz o data frame. En este caso es al data frame datos en las columnas 1 y 3 con datos[ , c(1,3)]. Es importante es espacio antes de la coma, eso significa que se va a aplicar la función a todas las filas. El número 1 le indica a apply que debe operar por filas. Con 2 aplicaría la función por columnas.

La función que aplicamos es mean, que calcula la media. A pasarle el argumento na.rm = TRUE ignora los valores perdidos en el cálculo de la media. Por defect con na.rm = FALSE regresa NA cuando un vector contiene al menos un valor NA.

Por último con <- asignamos el output resultante de apply (un vector) a una nueva columna llamada TempC del data frame datos.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *