R语言 通过样条曲线在列之间插值

cbjzeqam  于 2023-05-26  发布在  其他
关注(0)|答案(1)|浏览(98)

我有一个dataframe,看起来像这样:

df <- data.frame(dates = c("2020-12-31", "2021-01-31"),
                 x1 = c(0.50, 0.60),
                 x3 = c(1.00, 0.90),
                 x5 = c(1.50, 1.80),
                 x7 = c(2.00, 2.10),
                 x12 = c(2.50, 2.60),
                 x15 = c(3.00, 3.10))

我想插值使用样条曲线之间的每列(并添加一列之间存储插值)。因为每一行都是一个日期,所以每一行只能逐行跨列插值。我希望输出看起来像这样:

df_inter <- data.frame(dates = c("2020-12-31", "2021-01-31"),
                       x1 = c(0.50, 0.60),
                       x2 = c(0.75, 0.65),
                       x3 = c(1.00, 0.90),
                       x4 = c(1.25, 1.35),
                       x5 = c(1.50, 1.80),
                       x6 = c(1.75, 1.95),
                       x7 = c(2.00, 2.10),
                       x8 = c(2.10, 2.20),
                       x9 = c(2.20, 2.30),
                       x10 = c(2.30, 2.40),
                       x11 = c(2.40, 2.50), 
                       x12 = c(2.50, 2.60),
                       x13 = c(2.70, 2.80),
                       x14 = c(2.70, 2.90),
                       x15 = c(3.00, 3.10))

真实的的dataframe有几百行。

bxfogqkk

bxfogqkk1#

我猜您希望使用列名x1x2,...,x15作为x值,并使用df中的条目作为y值。也许你可以试试这个

x <- as.numeric(gsub("\\D", "", names(df[-1])))
y <- t(df[-1])

cbind(
    df[1],
    data.frame(t(sapply(
        1:ncol(y),
        \(k) splinefun(x, y[, k])(seq(max(x)))
    )))
)

它给出了

dates  X1        X2  X3       X4  X5       X6  X7       X8       X9
1 2020-12-31 0.5 0.7520844 1.0 1.245831 1.5 1.764590 2.0 2.168296 2.279916
2 2021-01-31 0.6 0.5878255 0.9 1.374349 1.8 2.014778 2.1 2.174178 2.261128
       X10      X11 X12      X13      X14 X15
1 2.357387 2.423239 2.5 2.609420 2.770134 3.0
2 2.360988 2.473899 2.6 2.740956 2.904527 3.1

相关问题