用NA计算平均值

时间:2014-12-10 14:32:07

标签: r

假设我们有两个数值变量x1和x2。某些行缺少x1或x2或两者的值。我需要创建第三个变量,比如ave,来计算x1和x1的平均值(如果两者都存在)(ave = mean(x1,x2));如果只存在其中一个,则ave = xi,i = 1或2.如果两者都缺失,则ave = NA。

这就是我所拥有的

df <- data.frame(x1=c(1,2,3,3,NA,5,6,2,6,NA,1,2,6, NA), x2=c(4,2,8,NA,NA,5,6,2,NA,3,1,2,6, NA))


    x1  x2
1   1   4
2   2   2
3   3   8
4   3   NA
5   NA  NA
6   5   5
7   6   6
8   2   2
9   6   NA
10  NA  3
11  1   1
12  2   2
13  6   6
14  NA  NA

我需要什么

    x1  x2  ave
1   1   4   2.5
2   2   2   2
3   3   8   11.5
4   3   NA  3
5   NA  NA  NA
6   5   5   5
7   6   6   6
8   2   2   2
9   6   NA  6
10  NA  3   3
11  1   1   1
12  2   2   2
13  6   6   6
14  NA  NA  NA

1 个答案:

答案 0 :(得分:3)

将您的规则放在ifelse声明中:

> df$ave = with(df, ifelse(is.na(x1), x2, ifelse(is.na(x2), x1,(x1+x2)/2)))
> 
> df
   x1 x2 ave
1   1  4 2.5
2   2  2 2.0
3   3  8 5.5
4   3 NA 3.0
5  NA NA  NA
6   5  5 5.0
7   6  6 6.0
8   2  2 2.0
9   6 NA 6.0
10 NA  3 3.0
11  1  1 1.0
12  2  2 2.0
13  6  6 6.0
14 NA NA  NA