假设我们有两个数值变量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
答案 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