如何获得所选列的平均值(平均值)

时间:2012-02-28 22:05:18

标签: r

我想获得每行某些列的平均值。

我有这些数据:

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

我想得到某些列的意思,而不是全部。我的问题是我的数据中有很多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,我不应该除以2。我尝试了cumsum但是当该行中有一个NA时返回NAs。我想我正在寻找能够添加所选列的内容,忽略NAs,获取没有NA的所选列的数量并除以该数字。我尝试了平均而且平均而且完全难倒。

ETA:我是否还可以为特定列添加权重?

2 个答案:

答案 0 :(得分:37)

以下是一些例子:

> 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

答案 1 :(得分:18)

尝试使用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