es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo calcular la media de fila de columnas seleccionadas

Tengo un conjunto de datos que luce así:

data <- as.data.frame(cbind('01-01-2018' = c(1.2,3.1,0.7,-0.3,2.0), '02-01-2018' = c(-0.1, 2.4, 4.9,-3.3,-2.7), '03-01-2018' = c(3.4, -2.6, -1.8, 0.1, 0.3)))

01-01-2018  02-01-2018  03-01-2018
1      1.2       -0.1        3.4
2      3.1        2.4       -2.6
3      0.7        4.9       -1.8
4     -0.3       -3.3        0.1
5      2.0       -2.7        0.3

Quiero calcular la media de las filas considerando sólo las columnas que superen la media total de la fila.

data$mn <- apply(data, 1, mean) 

01-01-2018 02-01-2018 03-01-2018         mn
1        1.2       -0.1        3.4  1.5000000
2        3.1        2.4       -2.6  0.9666667
3        0.7        4.9       -1.8  1.2666667
4       -0.3       -3.3        0.1 -1.1666667
5        2.0       -2.7        0.3 -0.1333333

En otras palabras, para cada fila, quiero calcular promedio de los valores que superan data$mn.

Mi último intento fue:

data$mintensity <- apply(data, 1, function(x) mean(x[x > data$mn]))

pero no tuvo éxito.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para calcular las medias de fila considerando únicamente las columnas que superan la media total de la fila, se puede usar el siguiente código:

    data$mn <- apply(data, 1, mean)
    data$mintensity <- apply(data, 1, function(x) mean(x[x > data$mn]))
    

    La primera línea calcula la media de cada fila y la almacena en una nueva columna “mn” en el dataframe “data”. La segunda línea utiliza una función anónima para calcular la media únicamente de los valores en cada fila que superan la media de la fila, que se almacena en una nueva columna “mintensity”. Esto debería darle el resultado deseado:

      01-01-2018 02-01-2018 03-01-2018         mn mintensity
    1        1.2       -0.1        3.4  1.5000000   3.300000
    2        3.1        2.4       -2.6  0.9666667   2.750000
    3        0.7        4.9       -1.8  1.2666667   4.900000
    4       -0.3       -3.3        0.1 -1.1666667   0.100000
    5        2.0       -2.7        0.3 -0.1333333   2.150000
    

Comments are closed.