R 从零开始的线性插值

R 从零开始的线性插值,r,R,我有一个每日时间序列数据集,我正试图对其执行每小时线性插值。我的代码在点之间执行线性插值,但我需要从每个ID的最后一个点之后的0开始,然后开始新的一天 下面是我在向每日原始数据中添加缺少的小时数后的输出 以下是执行以下代码后的输出,但我不确定如何从0开始: dfYPO0_20171 <- dfYPO0_2017 %>% mutate(TIMESTAMP = as.POSIXct(as.character(TIMESTAMP))) %>% group_by(ID) %&g

我有一个每日时间序列数据集,我正试图对其执行每小时线性插值。我的代码在点之间执行线性插值,但我需要从每个ID的最后一个点之后的0开始,然后开始新的一天

下面是我在向每日原始数据中添加缺少的小时数后的输出

以下是执行以下代码后的输出,但我不确定如何从0开始:

dfYPO0_20171 <- dfYPO0_2017 
%>% mutate(TIMESTAMP = as.POSIXct(as.character(TIMESTAMP))) 
%>% group_by(ID) 
%>% do(left_join(data.frame(ID= .$ID[1], TIMESTAMP = seq(min(.$TIMESTAMP), max(.$TIMESTAMP), by = "hour")), ., by=c("ID", "TIMESTAMP"))) 
%>% mutate(CALC_HOURLY_PROD= na.approx(.$"Total Prod Yest"))
dfYPO0\u 20171%突变(时间戳=as.POSIXct(as.character(TIMESTAMP)))
%>%分组人(ID)
%>%do(左联合(data.frame(ID=.$ID[1],TIMESTAMP=seq(min(.$TIMESTAMP),max(.$TIMESTAMP),by=“hour”),,by=c(“ID”,“TIMESTAMP”))
%>%变异(计算每小时产量=不适用约($“总产量”))

以下是我希望输出的内容:


提前谢谢你的帮助

这里有一种使用
tidyverse
包的方法。首先,我们将根据缺失值的运行创建组,然后使用
approx
进行插值

library(tidyverse)

# Fake data
dat = data.frame(time=seq(as.Date("2015-01-01"), as.Date("2015-01-31"), "1 day"),
                 prod=c(10.4, rep(NA,19), 25.8, rep(NA,9), 14.2))

dat = dat %>% 
  # Create groups based on runs of NA followed by a value
  mutate(group = rev(cumsum(!is.na(rev(prod))))) %>% 
  # Operate on the groups we just created
  group_by(group) %>% 
  # First, add a zero at the beginning of each group, then run the approx function
  #  to interpolate values for all groups of length greater than 1 
  mutate(prod = replace(prod, row_number()==1 & n()>1, 0),
         prod = if(n()>1) approx(time, prod, xout=time)$y else prod) %>%
  ungroup %>% select(-group)

这里有一种使用
tidyverse
包的方法。首先,我们将根据缺失值的运行创建组,然后使用
approx
进行插值

library(tidyverse)

# Fake data
dat = data.frame(time=seq(as.Date("2015-01-01"), as.Date("2015-01-31"), "1 day"),
                 prod=c(10.4, rep(NA,19), 25.8, rep(NA,9), 14.2))

dat = dat %>% 
  # Create groups based on runs of NA followed by a value
  mutate(group = rev(cumsum(!is.na(rev(prod))))) %>% 
  # Operate on the groups we just created
  group_by(group) %>% 
  # First, add a zero at the beginning of each group, then run the approx function
  #  to interpolate values for all groups of length greater than 1 
  mutate(prod = replace(prod, row_number()==1 & n()>1, 0),
         prod = if(n()>1) approx(time, prod, xout=time)$y else prod) %>%
  ungroup %>% select(-group)

复制该列,首先填写零,然后运行
na.approx
?请不要将数据与图像一起提供。没有人想把它全部重新输入。相反,请使用
dput
制作数据的可打印表单,并将其粘贴到您的问题中。很抱歉,我将确保以后不会发生这种情况。复制该列,首先填写零,然后运行
na.approx
?请不要为您的数据提供图像。没有人想把它全部重新输入。相反,请使用
dput
制作数据的可打印表单,并将其粘贴到您的问题中。很抱歉,我将确保以后不会发生这种情况。效果非常好,谢谢您向我展示一个新包!工作得很好,谢谢你给我看了一个新的包!