插值以在 R 中获得特定值

Interpolate to obtaining certain value in R

我正在处理一个 1501 x 35 值的数据框,数据如下所示 table:

Date 1 3 4 5 6
10/02/20 0.04919382 0.04962555 0.04579872 0.0354689 0.048592
20/05/20 0.04909930 0.04957330 0.0458772 0.04741 0.052167
12/08/20 0.04909930 0.04957330 0.04525272 0.035544 0.045489
18/10/20 0.04915135 0.04957330 0.047822 0.03485484 0.024452

我想通过插值获取“第 2 列”的数据。

我试过 result<- approx(data, data, xout = data, method = 'linear')

但是没有成功,结果是错误的。我也试过 approxfun 但它 returns 50 个值而不是 1501。我怎样才能做正确的线性插值?

非常感谢。

我相信你想要的就是这个。目前没有什么可插值的,您首先需要一个 NA 列。您可以 append 在第二个位置之后。

(d <- as.data.frame(append(d, list(X2=NA), 2)))
#         Date         X1 X2         X3         X4         X5       X6
# 1 2020-02-10 0.04919382 NA 0.04962555 0.04579872 0.03546890 0.048592
# 2 2020-05-20 0.04909930 NA 0.04957330 0.04587720 0.04741000 0.052167
# 3 2020-08-12 0.04909930 NA 0.04957330 0.04525272 0.03554400 0.045489
# 4 2020-10-18 0.04915135 NA 0.04957330 0.04782200 0.03485484 0.024452

现在您想 apply approx 函数按行,即 MARGIN=1。逻辑是,您向它提供一系列要插入的值的长度,即每个 apply 迭代的 xseq(x) 以及包含 NAs 即 x 本身。从输出中你想要 y,并且因为它是整个(转置)矩阵,所以只有行 [2,].

d$X2 <- apply(d[-1], MARGIN=1, function(x) approx(seq(x), x, seq(x))$y)[2,]
d
#         Date         X1         X2         X3         X4         X5       X6
# 1 2020-02-10 0.04919382 0.04940968 0.04962555 0.04579872 0.03546890 0.048592
# 2 2020-05-20 0.04909930 0.04933630 0.04957330 0.04587720 0.04741000 0.052167
# 3 2020-08-12 0.04909930 0.04933630 0.04957330 0.04525272 0.03554400 0.045489
# 4 2020-10-18 0.04915135 0.04936232 0.04957330 0.04782200 0.03485484 0.024452

数据:

d <- structure(list(Date = structure(c(18302, 18402, 18486, 18553), class = "Date"), 
    X1 = c(0.04919382, 0.0490993, 0.0490993, 0.04915135), X3 = c(0.04962555, 
    0.0495733, 0.0495733, 0.0495733), X4 = c(0.04579872, 0.0458772, 
    0.04525272, 0.047822), X5 = c(0.0354689, 0.04741, 0.035544, 
    0.03485484), X6 = c(0.048592, 0.052167, 0.045489, 0.024452
    )), row.names = c(NA, -4L), class = "data.frame")