2015-12-02 73 views
0

該代碼看起來像這樣,雖然可以工作,但帶有警告。警告是要替換的項目數量不是替換長度的倍數,所以我明白它與長度有關,但我不太明白。如何用來自其他表格的數值替換NA與表格的標題相匹配

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

df是包含var1和var2的數據幀,var1是數字,var2是因子。我想用數組'avg'中名稱與var2值匹配的值替換df中var1的NA。我希望問題很清楚! as.character在這裏並沒有真正的區別。

第4行的數據DF的樣子

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") 

和第4行的 '平均' 看起來像

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

您還沒有在您的任何問題中添加可重複的例子,包括這一個。請閱讀[問] –

回答

1

如果數據幀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 

您可以使用avg中的值替換NA值:

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 
+0

感謝您的解決方案。你能告訴我這個特定的錯誤是什麼? 'df.t $ VAR1 [is.na(df.t $ VAR1)] =平均[ 「df.t $ VAR2」]' –

相關問題