R插入data.table列

时间:2015-09-26 17:27:56

标签: r data.table interpolation ecdf

我试图在两个时间序列之间插入超越概率,这里的时间并不重要。

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])] 

我收到错误:

  

.approxfun(x,y,v,method,yleft,yright,f)出错:     (list)对象无法强制键入&#39; double&#39;

来自电话data1prob(elevation)。我相信调用高程向量而不是每行的单独高程值。 我elevation[,prob:=elevation-as.numeric(approx(x = x, y =c(5,6), xout = 1.5)[2])]时没有任何问题,但是当我尝试elevation[,prob:=data1prob(elevation)]时,我会这样做。

感谢您的任何意见。

1 个答案:

答案 0 :(得分:2)

我非常确定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