我如何将 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
代码看起来像这样,它虽然有效但有警告。警告是要替换的项目数不是替换长度的倍数,所以我知道它与长度有关,但我不太明白。
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