从不同的数据框估算缺失值并生成许多数据框

Imputation of missing Values from a different Data Frame and generating many data frames

我的示例输入文件 DF1 包含许多缺少数据的行和列,我想从不同的数据帧中估算丢失的数据 DF2 并生成许多数据帧,如中所示输出ans保存为数据框。任何人都可以帮助解决这个问题。

输入:

DF1: 

GM  A   B   C   D   E
1   22  34  56  345 76
2   34  44  777 67  NA
3   45  76  77  NA  NA
4   56  88  NA  NA  NA
5   36  NA  NA  NA  NA

DF2

V1  V2  V3
1   11  21
2   12  22
3   13  23
4   14  24
5   15  25
6   16  26
7   17  27
8   18  28
9   19  29
10  20  30

输出:

输出V1:

GM  A   B   C   D   E
1   22  34  56  345 76
2   34  44  777 67  1
3   45  76  77  2   3
4   56  88  4   5   6
5   36  7   8   9   10

输出V2

GM  A   B   C   D   E
1   22  34  56  345 76
2   34  44  777 67  11
3   45  76  77  12  13
4   56  88  14  14  16
5   36  17  18  19  20

输出 3:

GM  A   B   C   D   E
1   22  34  56  345 76
2   34  44  777 67  21
3   45  76  77  22  23
4   56  88  24  25  26
5   36  27  28  29  30

我确实放了图片以清楚地将 DF2 的值添加到输出数据帧

输出 V1:

输出V2:

如果有人能帮我解决这个问题就太好了,因为DF2中有很多变量,根据变量的数量需要生成很多数据帧。

可以转置DF1,填充缺失值,然后转置回去:

t_df <- t(df1)
t_df[is.na(t_df)] <- df2$V1
as.data.frame(t(t_df))

#  GM  A  B   C   D  E
#1  1 22 34  56 345 76
#2  2 34 44 777  67  1
#3  3 45 76  77   2  3
#4  4 56 88   4   5  6
#5  5 36  7   8   9 10

如果所有列都具有相同的数据类型,此方法效果最佳,否则数据类型可能会因转置而混淆。


impute_by_row <- function(df, values) {
    t_df <- t(df)
    t_df[is.na(t_df)] <- values
    as.data.frame(t(t_df))
}

impute_by_row(df1, df2$V1)
#  GM  A  B   C   D  E
#1  1 22 34  56 345 76
#2  2 34 44 777  67  1
#3  3 45 76  77   2  3
#4  4 56 88   4   5  6
#5  5 36  7   8   9 10

impute_by_row(df1, df2$V2)
#  GM  A  B   C   D  E
#1  1 22 34  56 345 76
#2  2 34 44 777  67 11
#3  3 45 76  77  12 13
#4  4 56 88  14  15 16
#5  5 36 17  18  19 20

impute_by_row(df1, df2$V3)
#  GM  A  B   C   D  E
#1  1 22 34  56 345 76
#2  2 34 44 777  67 21
#3  3 45 76  77  22 23
#4  4 56 88  24  25 26
#5  5 36 27  28  29 30

将函数应用于df2的所有列:

lapply(df2, function(v) impute_by_row(df1, v))

$V1
  GM  A  B   C   D  E
1  1 22 34  56 345 76
2  2 34 44 777  67  1
3  3 45 76  77   2  3
4  4 56 88   4   5  6
5  5 36  7   8   9 10

$V2
  GM  A  B   C   D  E
1  1 22 34  56 345 76
2  2 34 44 777  67 11
3  3 45 76  77  12 13
4  4 56 88  14  15 16
5  5 36 17  18  19 20

$V3
  GM  A  B   C   D  E
1  1 22 34  56 345 76
2  2 34 44 777  67 21
3  3 45 76  77  22 23
4  4 56 88  24  25 26
5  5 36 27  28  29 30