Подтвердить что ты не робот

Как я могу получить среднее (среднее) выбранных столбцов

Я хотел бы получить среднее значение для определенных столбцов для каждой строки.

У меня есть следующие данные:

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)

Что возвращает:

  w x  y
1 5 1  1
2 6 2  2
3 7 3  3
4 8 4 NA

Я хотел бы получить среднее значение для определенных столбцов, а не для всех. Моя проблема в том, что в моих данных много НС. Поэтому, если бы я хотел иметь среднее значение x и y, это то, что я хотел бы получить назад:

  w x  y mean
1 5 1  1    1
2 6 2  2    2
3 7 3  3    3
4 8 4 NA    4

Я думаю, я мог бы сделать что-то вроде z$mean=(z$x+z$y)/2 но последняя строка для y равна NA, поэтому, очевидно, я не хочу, чтобы NA вычислялся, и я не должен делиться на два. Я пробовал cumsum но это возвращает NA, когда в этой строке есть один NA. Я предполагаю, что я ищу что-то, что добавит выбранные столбцы, проигнорирует NA, получит количество выбранных столбцов, у которых нет NA, и разделите их на этот номер. Я пробовал - средний и средний, и я полностью в тупике.

ETA: Есть ли способ добавить вес к определенному столбцу?

4b9b3361

Ответ 1

Вот некоторые примеры:

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

средневзвешенное значение

> z$y <- rev(z$y)
> z
  w x  y 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
  w x  y 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

Ответ 2

Попробуйте использовать rowMeans:

z$mean=rowMeans(z[,c("x", "y")], na.rm=TRUE)

  w x  y mean
1 5 1  1    1
2 6 2  2    2
3 7 3  3    3
4 8 4 NA    4