R 中的自然插值

问题描述 投票:0回答:1

我正在尝试使用 spline 函数(stats R 包)来插值数据。

具体来说,我有一个如下所示的数据集:

DATE    Y
01/01/2020  
02/01/2020  0.705547512
04/01/2020  0.760723591
06/01/2020  0.014017642
07/01/2020  
09/01/2020  0.579518616
10/01/2020  
12/01/2020  0.7747401
15/01/2020  0.289562464
19/01/2020      

我想学习如何根据其他值(例如 1 月 1 日、1 月 7 日等的 Y 变量值)插入缺失数据。 目的是填充这些缺失的数据;为了做到这一点,在互联网上浏览,我找到了应该执行此任务的splineR函数。

有人可以帮我计算插值数据吗? 预先感谢。

因此,我尝试实现以下 R 代码来插入缺失的数据。

SPLINE<- spline(x=df[2],
       y=df[1],
       method = "natural")$y

结果是一个有3条记录的数值向量;它们都等于 10。 我不明白这种插值背后的比率,因为我期望一个具有 10 个记录的向量,并且所有观察值都等于原始 Y 变量,除了对应于 2020-01-07、2020-01-10 和 2020-01 的记录之外-19 丢失,样条函数用所选方法填充。

r interpolation spline linear-interpolation
1个回答
0
投票

很难判断您的问题是什么,因为您的数据不可重现。您的数据框中的那些“真的”是空单元格吗?数字列不能有空单元格 - 它们必须是 NA 值。如果打印数据框时它们看起来为空,则它是字符列,必须转换为数字,否则 spline 将不起作用。另外,这些是

real
日期对象,还是只是代表日期的字符串?同样,如果它们是字符串,spline 将不起作用。
让我们以给定的示例数据为例:

df <- read.table(text = " DATE Y 01/01/2020 '' 02/01/2020 0.705547512 04/01/2020 0.760723591 06/01/2020 0.014017642 07/01/2020 '' 09/01/2020 0.579518616 10/01/2020 '' 12/01/2020 0.7747401 15/01/2020 0.289562464 19/01/2020 '' ", header = TRUE)

现在我们转换为正确的格式:

df$DATE <- as.Date(df$DATE, format = '%d/%m/%Y') df$Y <- as.numeric(df$Y)

接下来,
spline

就可以正常工作了。让我们用它来生成一条由 100 个点组成的平滑线:

SPLINE  <- spline(x = df$DATE, y = df$Y, n = 100, method = 'natural')

plot(df$DATE, df$Y, ylim = c(-0.1, 1))
lines(SPLINE$x, SPLINE$y)

创建于 2023-09-01,使用

reprex v2.0.2

© www.soinside.com 2019 - 2024. All rights reserved.