2016-07-28 90 views
2
a = data.table(c(2,NA,3), c(5,NA,1)) 

在固定行遺漏值當我嘗試過插值失蹤線[R data.table - 如何在插值多列

a[, approx(x = 1:.N, y = .SD, xout = which(is.na(.SD))), .SDcols = 1:2] 

提供了以下錯誤:

Error in xy.coords(x, y) : 'x' and 'y' lengths differ 

我希望得到以下結果:

> a 
    V1 V2 
1: 2.0 5 
2: 2.5 3 
3: 3.0 1 
+1

你不能在動物園中使用'na.approx()'嗎? – theArun

+0

當然,你可以覆蓋整個列,比如'a [,names(a):= lapply(.SD,function(z)approx(.I,z,xout = .I)$ y)]'打破了使用data.table(它允許編輯列的一部分)的目的。注意:'.I'是表格行號的向量。 – Frank

回答

3

它s eems像xy(前兩個參數)應該是數字向量。您需要遍歷每一列。在這裏,我使用set()以及for-loop來更新原始data.table ,引用爲

len = 1:nrow(a) 
for (col in names(a)) { 
    nas = which(is.na(a[[col]])) 
    set(a, i=nas, j=col, value=approx(len, a[[col]], xout=nas)$y) 
} 
#  V1 V2 
# 1: 2.0 5 
# 2: 2.5 3 
# 3: 3.0 1 
+0

非常感謝。不過,我不知道.SD是否是循環遍歷列的data.table語法(使用指定哪些列的.SDcols)?不知何故,na.approx()在approx()不工作的地方工作。 – Amitai