Come posso ottenere la media (media) delle colonne selezionate

Vorrei ottenere la media per determinate colonne per ogni riga.

Ho questi dati:

w=c(5,6,7,8) x=c(1,2,3,4) y=c(1,2,3) length(y)=4 z=data.frame(w,x,y) 

Che restituisce:

  wxy 1 5 1 1 2 6 2 2 3 7 3 3 4 8 4 NA 

Mi piacerebbe ottenere la media per alcune colonne, non tutte. Il mio problema è che ci sono un sacco di NA nei miei dati. Quindi se volevo la media di xey, questo è quello che vorrei tornare:

  wxy mean 1 5 1 1 1 2 6 2 2 2 3 7 3 3 3 4 8 4 NA 4 

Credo che potrei fare qualcosa come z$mean=z$x+z$y/2 ma l’ultima riga per y è NA, quindi ovviamente non voglio che l’NA sia calcasting e non dovrei dividermi per due. Ho provato cumsum ma questo restituisce NA quando c’è una sola NA in quella riga. Immagino di dover cercare qualcosa che aggiunga le colonne selezionate, ignori le NA, ottenga il numero di colonne selezionate che non hanno NA e dividono per quel numero. Ho provato ?? media e ?? media e sono completamente perplesso.

ETA: C’è anche un modo per aggiungere un peso a una colonna specifica?

Ecco alcuni esempi:

 > z$mean <- rowMeans(subset(z, select = c(x, y)), na.rm = TRUE) > z wxy mean 1 5 1 1 1 2 6 2 2 2 3 7 3 3 3 4 8 4 NA 4 

media pesata

 > z$y <- rev(z$y) > z wxy mean 1 5 1 NA 1 2 6 2 3 2 3 7 3 2 3 4 8 4 1 4 > > weight <- c(1, 2) # x * 1/3 + y * 2/3 > z$wmean <- apply(subset(z, select = c(x, y)), 1, function(d) weighted.mean(d, weight, na.rm = TRUE)) > z wxy mean wmean 1 5 1 NA 1 1.000000 2 6 2 3 2 2.666667 3 7 3 2 3 2.333333 4 8 4 1 4 2.000000 

Prova a usare rowMeans :

 z$mean=rowMeans(z[,c("x", "y")], na.rm=TRUE) wxy mean 1 5 1 1 1 2 6 2 2 2 3 7 3 3 3 4 8 4 NA 4