r - 如何根据R中之前和之后的日期填充缺失的数据?
问题描述
以图 1 为例,我们可以看到 10/12/2016 12:07 的数据缺失。我想使用上一行和下一行数据(即 10/10/2016 10:50 5.73;10/24/2016 08:53 6.09)来线性插值这个缺失的数据(不是“5.73”的平均值和“6.09”,但根据“日期”)。示例数据文件附在下面:
09/26/2016 11:57 5.42
10/10/2016 10:50 5.73
10/12/2016 12:07
10/24/2016 08:53 6.09
11/07/2016 11:25 6.43
11/21/2016 13:57 6.33
12/05/2016 14:01 7.97
12/19/2016 13:00 8.47
你可以看到图2,我们可以使用“Trend()”来实现这个目标。
=TREND(M22:M23,L22:L23,O22)
我想知道R中是否也有有用的功能?
解决方案
示例数据:
df <- data.frame(date = mdy_hm(
c("10/10/2016 10:50",
"10/12/2016 12:07",
"10/24/2016 08:53")),
figure = c(5.73, NA_real_, 6.09))
使用zoo
包:
library(zoo)
library(magrittr)
zoo(df$figure, df$date) %>%
na.approx() %>%
as.data.frame()
使用lubridate
和dplyr
library(dplyr)
library(lubridate)
df %>%
mutate(figure = ifelse(is.na(figure),
lag(figure, 1) + (lead(figure, 1) - lag(figure, 1)) *
as.numeric(difftime(date, lag(date, 1))) /
as.numeric((difftime(lead(date, 1), date) + difftime(date, lag(date, 1)))),
figure)) %>%
mutate(figure = round(figure, 2))
推荐阅读
- .net-core - 为什么 .Net Core 的 PublishSingleFile 进行自提取而不是资源嵌入程序集?
- mongodb - 在mongodb聚合管道中计算组内的百分比
- java - 使用 google-rfc-2445 createDateTimeIterator 生成日期范围时,结束日期(UNTIL)被排除在外
- javascript - 将 Int 值传递给 GraphQL
- python-3.x - 如何修复 IndexError:索引 0 超出轴 1 大小为 0 的范围
- python - python类实例调用get()而不声明
- postgresql - 创建扩展 postgis 失败,
- python - 是否可以仅在垂直(Z 维度)中创建 Delaunay 三角剖分?
- java - 试图从保存在草图软件的地图变量中的 json 对象中获取子键值
- javascript - “onmouseout”不起作用。图像没有改变