在我的数据https://pastebin.com/CernhBCg中,我有不规则的时间戳和相应的value
。除了不规则之外,我还有很大的差距,对我来说,我的数据没有任何价值。但我知道,对于那些差距value
为零,我想填补value=0
行的间隙。我怎么能这样做?
> dput(head(hub2_select,10))
structure(list(time = structure(c(1492033212.648, 1492033212.659,
1492033212.68, 1492033212.691, 1492033212.702, 1492033212.724,
1492033212.735, 1492033212.757, 1492033212.768, 1492033212.779
), class = c("POSIXct", "POSIXt"), tzone = "UTC"), value = c(3,
28, 246, 297, 704, 798, 1439, 1606, 1583, 1572)), .Names = c("time",
"value"), row.names = c(NA, 10L), class = "data.frame")
请带上我提供的文件查看数据并用
将其读入R中library(readr)
df <- read_csv("data.csv", col_types = list(time = col_datetime(), value = col_double()))
对于一个,间隙的左右两侧的值通常为0或1.这可能会有所帮助。我以为我会使用滚动连接,但从现在开始我理解,这似乎不是可行的方法。
什么有效
library(dplyr)
library(lubridate)
threshold_time = dseconds(2)
time_prev = df$time[1]
addrows = data.frame()
for (i in seq(2, nrow(df),1)){
time_current <- df$time[i]
if ((time_current - time_prev) > threshold_time){
time_add <- seq(time_prev, time_current, dseconds(0.1))
addrows = bind_rows(addrows, data.frame(time=time_add, value=rep(0, length(time_add))))
}
time_prev <- time_current
}
addrows$type <- 'filled'
df$type <- 'orig'
df_new <- bind_rows(df, addrows)
library(ggplot2)
ggplot(df_new, aes(time,value,color=type)) + geom_point()
但是这个解决方案既不优雅也不高效(虽然我没有测试效率)。
答案 0 :(得分:0)
老实说,我还没有尝试过(由于其他原因我不得不切换到Python并在那里解决它并且没有试过它),但我很确定{{3}本来应该是答案。我只想在这里为其他读者写这个问题。