我有许多行和列中的示例输入文件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
输出:
OutputV1:
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
OutputV2
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的值添加到输出数据帧
OuputV1:
OutputV2:
如果有人帮我解决这个问题会很棒,因为DF2中有许多变量,需要根据变量的数量生成许多数据帧。
答案 0 :(得分:1)
您可以转置 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