基于数据帧中多个列上的组,用平均值替换NA

时间:2019-03-28 12:59:12

标签: r

我有一个非常大的数据框。列之一是对数据进行分组的“ ID”列。我希望将所有NA替换为每一列的组平均值(而不是每次都命名该列)。

我尝试过aggregate(data[, 2:ncol(data)], list(data$ID), mean),它为我提供了每一列的每组平均值(即我希望输入的数字而不是NA),但是我不知道如何做替换部分-如何您是否告诉R用另一个数据框中与列名和组名匹配的值替换NA?

一个简单的例子就是这个;

ID  x  y  z
1   a 12 NA  8
2   a 19 84 NA
3   a NA 21 14
4   a  5 84 73
5   a 56 94 63
6   a 65 23 26
7   a  5  2 16
8   b  5 18 NA
9   b 95 67 67
10  b  5 NA 25
11  b 17 34 16
12  b NA 46  3
13  b 12 25 35
14  b 18 23 12
15  b  5 95 57
16  c 56 18 21
17  c NA  4 46
18  c 58  9 64
19  c 12 78 16
20  c 26  0 17
21  c  4 78 NA
22  c  9  8  2

转到;

 ID    x    y    z
1   a 12.0 44.0  8.0
2   a 19.0 84.0 28.6
3   a 23.1 21.0 14.0
4   a  5.0 84.0 73.0
5   a 56.0 94.0 63.0
6   a 65.0 23.0 26.0
7   a  5.0  2.0 16.0
8   b  5.0 18.0 26.9
9   b 95.0 67.0 67.0
10  b  5.0 38.5 25.0
11  b 17.0 34.0 16.0
12  b 19.6 46.0  3.0
13  b 12.0 25.0 35.0
14  b 18.0 23.0 12.0
15  b  5.0 95.0 57.0
16  c 56.0 18.0 21.0
17  c 23.6  4.0 46.0
18  c 58.0  9.0 64.0
19  c 12.0 78.0 16.0
20  c 26.0 27.9 17.0
21  c  4.0 78.0 23.7
22  c  9.0  8.0  2.0

0 个答案:

没有答案