Jam*_*s A 41 r time-series missing-data
我是R的新手但是已经转向它来解决我正在尝试处理的大型数据集的问题.目前我有4列数据(Y值)设置为分钟间隔时间戳(月/日/年小时:分钟)(X值),如下所示:
timestamp tr tt sr st
1 9/1/01 0:00 1.018269e+02 -312.8622 -1959.393 4959.828
2 9/1/01 0:01 1.023567e+02 -313.0002 -1957.755 4958.935
3 9/1/01 0:02 1.018857e+02 -313.9406 -1956.799 4959.938
4 9/1/01 0:03 1.025463e+02 -310.9261 -1957.347 4961.095
5 9/1/01 0:04 1.010228e+02 -311.5469 -1957.786 4959.078
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是缺少一些时间戳值 - 例如,在9/1/01 0:13和9/1/01 0:27之间可能存在间隙,并且这些间隙在数据集中是不规则的.我需要将这些系列中的几个放入同一个数据库中,因为每个系列的缺失值不同,所以日期当前并不对齐每一行.
我想为这些丢失的时间戳生成行,并用空值(没有数据,不是零)填充Y列,这样我就有了一个连续的时间序列.
老实说,我不太确定从哪里开始(在我学习之前没有真正使用过R!)但是任何帮助都会非常感激.到目前为止,我已经安装了chron和zoo,因为看起来它们可能很有用.
谢谢!
lbo*_*lar 35
这是一个老问题,但我只想发布一个处理这个问题的dplyr方法,因为我在搜索类似问题的答案时遇到了这个帖子.我发现它比动物园方法更直观,更容易.
library(dplyr)
ts <- seq.POSIXt(as.POSIXct("2001-09-01 0:00",'%m/%d/%y %H:%M'), as.POSIXct("2001-09-01 0:07",'%m/%d/%y %H:%M'), by="min")
ts <- seq.POSIXt(as.POSIXlt("2001-09-01 0:00"), as.POSIXlt("2001-09-01 0:07"), by="min")
ts <- format.POSIXct(ts,'%m/%d/%y %H:%M')
df <- data.frame(timestamp=ts)
data_with_missing_times <- full_join(df,original_data)
timestamp tr tt sr st
1 09/01/01 00:00 15 15 78 42
2 09/01/01 00:01 20 64 98 87
3 09/01/01 00:02 31 84 23 35
4 09/01/01 00:03 21 63 54 20
5 09/01/01 00:04 15 23 36 15
6 09/01/01 00:05 NA NA NA NA
7 09/01/01 00:06 NA NA NA NA
8 09/01/01 00:07 NA NA NA NA
Run Code Online (Sandbox Code Playgroud)
同样使用dplyr,这使得更容易做一些事情,比如将所有缺少的值更改为其他东西,这在ggplot中绘图时对我来说很方便.
data_with_missing_times %>% group_by(timestamp) %>% mutate_each(funs(ifelse(is.na(.),0,.)))
timestamp tr tt sr st
1 09/01/01 00:00 15 15 78 42
2 09/01/01 00:01 20 64 98 87
3 09/01/01 00:02 31 84 23 35
4 09/01/01 00:03 21 63 54 20
5 09/01/01 00:04 15 23 36 15
6 09/01/01 00:05 0 0 0 0
7 09/01/01 00:06 0 0 0 0
8 09/01/01 00:07 0 0 0 0
Run Code Online (Sandbox Code Playgroud)
Her*_*ent 23
我认为最简单的事情就是先设置Date,如前所述,转换为zoo,然后设置合并:
df$timestamp<-as.POSIXct(df$timestamp,format="%m/%d/%y %H:%M")
df1.zoo<-zoo(df[,-1],df[,1]) #set date to Index
df2 <- merge(df1.zoo,zoo(,seq(start(df1.zoo),end(df1.zoo),by="min")), all=TRUE)
Run Code Online (Sandbox Code Playgroud)
从您的df1(原始数据)中给出开始和结束,然后根据您的示例需要设置 - 例如min - .all = TRUE将缺少日期的所有缺失值设置为NA.
Edw*_*win 14
日期填充padr在R 中的包中实现.如果存储数据框,则将日期时间变量存储为POSIXct或POSIXlt.你需要做的就是:
library(padr)
pad(df_name)
Run Code Online (Sandbox Code Playgroud)
请参阅vignette("padr")或此博客文章以了解其工作原理.
ok1*_*ore 12
我认为这可以通过complete在tidyr包中使用来完成。
library(tidyverse)
df <- df %>%
complete(timestamp = seq.POSIXt(min(timestamp), max(timestamp), by = "minute"),
tr, tt, sr,st)
Run Code Online (Sandbox Code Playgroud)
您还可以初始化您的开始日期和结束日期,而不是使用min(timestamp)and max(timestamp)。
| 归档时间: |
|
| 查看次数: |
44999 次 |
| 最近记录: |