我有一个包含每天多个值的时间序列,这些是来自一个来源的多个输入值。间隔中的某些天丢失(没有输入值)。因此,我首先确定唯一的日期,然后使用split()将每天的不同值分组。现在,我想创建一个具有不同行长的框架/矩阵。其中列长度与下面的日期向量的长度相同。为了访问这些值,我必须编写tu $ 2015-02-16
。如何建立该矩阵?我是 R 的新手,所以我的知识不是那么好。另外,我还会建议您如何在缺少的日子的行中添加零值的任何技巧。
d <- unique(dates)
tu <- split(timeseries, dates)
tu[1]
$`2015-02-16`
values dates
1 129839.0 2015-02-16
2 40000.0 2015-02-16
3 79839.0 2015-02-16
4 97528.0 2015-02-16
5 75416.5 2015-02-16
使用不同的数据样本,并使用dplyr
和tidyr
包:
set.seed(314)
df <- data.frame(values = rnorm(100),
dates = sample(as.Date('2017-01-01')+1:20,100,replace = T))
library(dplyr)
library(tidyr)
res <- df %>% group_by(dates) %>% mutate(row = row_number()) %>%
spread(dates, values,fill = 0)
结果是:
> res$'2017-01-02'
[1] -0.83870302 0.26933081 1.69739790 1.18466071 -0.07604657 0.00000000 0.00000000 0.00000000 0.00000000
或使用R base可以使用:
spl <- split(df, df$dates)
row.n <- max(sapply(spl, nrow))
do.call(cbind,lapply(spl, function(x) c(x$values, rep(0, row.n-nrow(x)))))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句