data.table 的 R 插值列
R interpolate column of data.table
我正在尝试在 2 个时间序列之间插入超出概率,时间在这里并不重要。
data1<-c(10,11,12,13,14,15)
data2<-c(20,21,22,23,24,25)
x<-c(1,2)
elevation<-c(10,11,20,24,25)
elevation<-data.table(elevation)
其中x[1]是data1的x参数,data1是那个位置的值。考虑 1 英里和 2 英里。高程是从 data1 的最小值到 data2 的最大值的序列。
我想对 1.5 英里处的所有超出概率进行插值。我试过的是:
data1prob<-ecdf(data1)
data2prob<-ecdf(data2)
elevation[,prob:=1-as.numeric(approx(x = x, y =c(data1prob(elevation),data2prob(elevation)), xout = 1.5)[2])]
我收到错误:
Error in .approxfun(x, y, v, method, yleft, yright, f) :
(list) object cannot be coerced to type 'double'
来自通话 data1prob(elevation)
。我相信调用的是高程矢量,而不是每行的单独高程值。
当我做 elevation[,prob:=elevation-as.numeric(approx(x = x, y =c(5,6), xout = 1.5)[2])]
时我没有任何问题,但是当我尝试 elevation[,prob:=data1prob(elevation)]
时我有任何问题。
感谢任何意见。
我很确定 OP 只是滥用了 approx
函数的矢量化。
这很好用:
elevation[, prob := mapply(
function(x,y1,y2) 1 - approx(x = x, y = c(y1,y2), xout = 1.5)[[2]],
list(x),
ecdf(data1)(elevation),
ecdf(data2)(elevation)
)]
# elevation prob
# 1: 10 0.91666667
# 2: 11 0.83333333
# 3: 20 0.41666667
# 4: 24 0.08333333
# 5: 25 0.00000000
我正在尝试在 2 个时间序列之间插入超出概率,时间在这里并不重要。
data1<-c(10,11,12,13,14,15)
data2<-c(20,21,22,23,24,25)
x<-c(1,2)
elevation<-c(10,11,20,24,25)
elevation<-data.table(elevation)
其中x[1]是data1的x参数,data1是那个位置的值。考虑 1 英里和 2 英里。高程是从 data1 的最小值到 data2 的最大值的序列。
我想对 1.5 英里处的所有超出概率进行插值。我试过的是:
data1prob<-ecdf(data1)
data2prob<-ecdf(data2)
elevation[,prob:=1-as.numeric(approx(x = x, y =c(data1prob(elevation),data2prob(elevation)), xout = 1.5)[2])]
我收到错误:
Error in .approxfun(x, y, v, method, yleft, yright, f) : (list) object cannot be coerced to type 'double'
来自通话 data1prob(elevation)
。我相信调用的是高程矢量,而不是每行的单独高程值。
当我做 elevation[,prob:=elevation-as.numeric(approx(x = x, y =c(5,6), xout = 1.5)[2])]
时我没有任何问题,但是当我尝试 elevation[,prob:=data1prob(elevation)]
时我有任何问题。
感谢任何意见。
我很确定 OP 只是滥用了 approx
函数的矢量化。
这很好用:
elevation[, prob := mapply(
function(x,y1,y2) 1 - approx(x = x, y = c(y1,y2), xout = 1.5)[[2]],
list(x),
ecdf(data1)(elevation),
ecdf(data2)(elevation)
)]
# elevation prob
# 1: 10 0.91666667
# 2: 11 0.83333333
# 3: 20 0.41666667
# 4: 24 0.08333333
# 5: 25 0.00000000