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