我如何将 NA 替换为其他 table 的值,这些值将 table 的标题与变量匹配

How do i replace NA with values from other table which matches the heading of the table to a variable

代码看起来像这样,它虽然有效但有警告。警告是要替换的项目数不是替换长度的倍数,所以我知道它与长度有关,但我不太明白。

df$var1[is.na(df.t$var1)]=avg[as.character(df.t$var2)]

df 是包含 var1 和 var2 的数据框,var1 是数字,var2 是一个因子。我想用名称与 var2 值匹配的数组 'avg' 中的值替换 df 中 var1 中的 NA。我希望问题很清楚!另外 as.character 在这里并没有什么区别。

数据 df 的前 4 行看起来像

structure(list(df.t.var1 = c(0L, 
0L, 0L, 0L), df.t.var2 = structure(c(14L, 
18L, 12L, 15L), .Label = c("AA", "AB", "AC", "AD", "AE", "BA", 
"BB", "BC", "BD", "BE", "CA", "CB", "CC", "CD", "CE", "DA", "DB", 
"DC", "DD", "DE", "EA", "EB", "EC", "ED", "EE", "FA", "FB", "FC", 
"FD", "FE", "GA", "GB", "GC", "GD", "GE"), class = "factor")), .Names = c("df.t.var1", 
"var2"), row.names = c(NA, 4L), class = "data.frame")

'avg' 的前 4 行看起来像

structure(c(0.0194610778443114, 0.0387323943661972, 0.035645472061657, 
0.0533656761673742), .Dim = 4L, .Dimnames = list(c("AA", "AB", 
"AC", "AD")))

如果你有数据框 df:

df <- data.frame(var1=c('AA', 'AA', 'AA', 'AC', 'AC', 'AD', 'AB'), 
                 var2=c(10, NA, 3,NA, 5, NA, 2))
df
  var1 var2
1   AA   10
2   AA   NA
3   AA    3
4   AC   NA
5   AC    5
6   AD   NA
7   AB    2

您可以将 NA 值替换为 avg 中的值:

df$var2[is.na(df$var2)] <- avg[match(df$var1[is.na(df$var2)], names(avg))]
df
#   var1        var2
# 1   AA 10.00000000
# 2   AA  0.01946108
# 3   AA  3.00000000
# 4   AC  0.03564547
# 5   AC  5.00000000
# 6   AD  0.05336568
# 7   AB  2.00000000