2016-07-28 86 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