以图1为例,我们可以看到缺少2016年10月12日12:07中的数据。我想使用上一行和下一行数据(即2016年10月10日10:50 5.73; 2016年10月24日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中是否还有有用的功能?
答案 0 :(得分:2)
示例数据:
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))