R data.table-如何在多列中的固定行上插入缺失值

R data.table-如何在多列中的固定行上插入缺失值,r,data.table,interpolation,R,Data.table,Interpolation,当我试图在缺失的直线上插值时 a = data.table(c(2,NA,3), c(5,NA,1)) 给出以下错误: 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 似乎x和y(前两个参数)应该是数字向量。您需要循环浏览每一列。。在这里,我使用set()和for循环

当我试图在缺失的直线上插值时

a = data.table(c(2,NA,3), c(5,NA,1))
给出以下错误:

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

似乎
x
y
(前两个参数)应该是数字向量。您需要循环浏览每一列。。在这里,我使用
set()
for循环
通过引用更新原始data.table


您不能使用zoo中的
na.approx()
吗?您当然可以覆盖完整的列,如
a[,name(a):=lapply(.SD,function(z)approx(.I,z,xout=.I)$y)]
,但这可能会破坏使用data.table(允许编辑部分列)的目的。注意:
.I
是表的行号向量。非常感谢。但是,我想知道的是,.SD不就是循环遍历列的data.table语法吗(其中.SDcols指定了哪些列)?不知何故,na.approx()在approx()不起作用的地方起作用。
> a
    V1 V2
1: 2.0  5
2: 2.5  3
3: 3.0  1
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