标签: zoo

从不规则的时间序列创建定期的15分钟时间序列

我在csv文件中有一个不规则的时间序列(使用DateTime和RainfallValue)C:\SampleData.csv:


DateTime,RainInches
1/6/2000 11:59,0
1/6/2000 23:59,0.01
1/7/2000 11:59,0
1/13/2000 23:59,0
1/14/2000 0:00,0
1/14/2000 23:59,0
4/14/2000 3:07,0.01
4/14/2000 3:12,0.03
4/14/2000 3:19,0.01
12/31/2001 22:44,0
12/31/2001 22:59,0.07
12/31/2001 23:14,0
12/31/2001 23:29,0
12/31/2001 23:44,0.01
12/31/2001 23:59,0.01
Run Code Online (Sandbox Code Playgroud)

注意:不规则的时间步长可以是1分钟,15分钟,1小时等.此外,在所需的15分钟间隔内可能有多个观察结果.

我试图创建一个从2000-01-01到2001-12-31的常规15分钟时间序列,看起来应该是这样的:


2000-01-01 00:15:00 0.00
2000-01-01 00:30:00 0.00
2000-01-01 00:45:00 0.00
...
2001-12-31 23:30:00 0.01
2001-12-31 23:45:00 0.01
Run Code Online (Sandbox Code Playgroud)

注意:时间序列是规则的,间隔为15分钟,用0填充缺失数据.如果15分钟间隔内有多个数据点,则将它们相加.

这是我的代码:


library(zoo)
library(xts)

filename = "C:\\SampleData.csv"
ReadData <- read.zoo(filename, format = "%m/%d/%Y %H:%M", sep=",", tz="UTC", header=TRUE) # read .csv as a ZOO object
RawData <- …
Run Code Online (Sandbox Code Playgroud)

r time-series zoo xts

8
推荐指数
2
解决办法
1万
查看次数

用以前的值替换缺失值

Event,Time,Bid,Offer
Quote,0.458338,9.77,9.78
Order,0.458338,NA,NA
Order,0.458338,NA,NA
Order,0.458338,NA,NA
Quote,0.458363,9.78,9.79
Order,0.458364,NA,NA
Run Code Online (Sandbox Code Playgroud)

我有一个像这样的数据框我想写一个有效的代码来填充NA以前的报价出价并询问,时间是排序的,只有报价包含出价和要求字段(最好是矢量化)

所以它变成了

Event,Time,Bid,Offer
Quote,0.458338,9.77,9.78
Order,0.458338,9.77,9.78
Order,0.458338,9.77,9.78
Order,0.458338,9.77,9.78
Quote,0.458363,9.78,9.79
Order,0.458364,9.78,9.79
Run Code Online (Sandbox Code Playgroud)

谢谢

r zoo

8
推荐指数
1
解决办法
8222
查看次数

如何在多个plot.zoo中添加多条直线

我有多个时间序列数据图,我需要在每个图中有一条水平线,但是水平值不同(例如h=50,第一个图:第二个图:h=48......).

我试过abline(h=50...,我在每个情节中得到水平线.我试过abline(h=c(50,48...,每个情节都会得到多条水平线.

我无法弄清楚如何获得plot.zoo索引以便h=50在第一个图中绘制,h=48在第二个图中等等.

library(xts)
data(sample_matrix)
x <- as.xts(sample_matrix)

# plot with single line
my.panel <- function(x, ...) {
    lines(x, ...)
    abline(h=50, col = "red", lty="solid", lwd=1.5 )
}
plot.zoo(x, main="title",
plot.type="multiple", type="o", lwd=1.5, col="blue",
panel=my.panel)


# plot multiple lines in all plots
my.panel <- function(x, ...) {
    lines(x, ...)
    abline(h=c(50,50,48,50), col = "red", lty="solid", lwd=1.5 )}

plot.zoo(x, main="title",
plot.type="multiple", type="o", lwd=1.5, col="blue",
panel=my.panel)
Run Code Online (Sandbox Code Playgroud)

plot r zoo

8
推荐指数
1
解决办法
3202
查看次数

将data.frame转换为zoo

我想将a转换data.frame为zoo对象.我df看起来像那样:

> (str(StockPriceReturns))
'data.frame':   3036 obs. of  2 variables:
 $ Date        : Factor w/ 3036 levels "01.01.2002","01.01.2003",..: 1 102 202 301 600 701 802 902 1001 1300 ...
 $ TotalReturns: num  183 183 186 191 191 ...
NULL
Run Code Online (Sandbox Code Playgroud)

我尝试了什么:

直:

我在这里得到一个错误......

> (z1 <- read.zoo(StockPriceReturns, drop=FALSE))
Error in read.zoo(StockPriceReturns, drop = FALSE) : 
  index has 3036 bad entries at data rows: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 …
Run Code Online (Sandbox Code Playgroud)

statistics r zoo

8
推荐指数
1
解决办法
1万
查看次数

替换多列的diff()

diff()计算指定滞后的向量中值之间的差异.是否存在适用于两个向量的等效函数?例如,我有:

v1 = c(1, 2, 3, 4, 5, 3)
v2 = c(5, 4, 3, 2, 1, 0)
Run Code Online (Sandbox Code Playgroud)

我需要计算滞后1处v1和v2的每个值之间的差异.那将是:

(2 - 5), (3 - 4), (4 - 3)... 
Run Code Online (Sandbox Code Playgroud)

这可以通过在2个向量上使用head()/ tails()的组合来实现,但我想知道是否已经存在可以执行相同操作的函数.

diff r zoo xts

7
推荐指数
1
解决办法
1208
查看次数

在R中使用线性插值添加缺失的xts/zoo数据

我确实有丢失数据的问题,但我没有NA - 否则会更容易处理...

我的数据如下:

time, value
2012-11-30 10:28:00, 12.9
2012-11-30 10:29:00, 5.5
2012-11-30 10:30:00, 5.5
2012-11-30 10:31:00, 5.5
2012-11-30 10:32:00, 9
2012-11-30 10:35:00, 9
2012-11-30 10:36:00, 14.4
2012-11-30 10:38:00, 12.6
Run Code Online (Sandbox Code Playgroud)

正如你所看到的 - 缺少一些分钟值 - 它是xts/zoo所以我使用as.POSIXct ...来设置日期作为索引.如何添加缺少的时间步以获得完整的ts?我想用线性插值填充缺失值.

谢谢您的帮助!

r time-series zoo xts

7
推荐指数
2
解决办法
6108
查看次数

R:在yearqtr(动物园)的ggplot中设置scale_x_yearqtr的限制

我正在使用类似于以下摘录的数据集:

head(nomis.lng.agg)
  quarter decile           avg.val
1 2004 Q4                1 5.680000
2 2005 Q1                1 5.745763
3 2005 Q2                1 5.503341
4 2005 Q3                1 5.668224
5 2005 Q4                1 5.244604
6 2006 Q1                1 5.347222
Run Code Online (Sandbox Code Playgroud)

变量quarter是由class yearqtr生成的zoo.其余两列是数字.我目前正在生成使用以下ggplot语法的绘图:

ggplot(data = subset(x = df,
                     subset = df$decile== 1 |
                         df$decile== 10),
       aes(x = quarter, y = avg.val, group = decile)) +
    geom_line(aes(linetype=as.factor(decile)),
              size = 1) +
    scale_x_yearqtr(format = "%YQ%q", n  = 5) +
    xlab("Quarter") + …
Run Code Online (Sandbox Code Playgroud)

r time-series ggplot2 zoo as.date

7
推荐指数
1
解决办法
3855
查看次数

R:按组插入 NA

我想在数据帧的变量中执行线性插值,其中考虑到:1)两点之间的时间差,2)获取数据的时刻以及 3)为测量变量而采取的个人。

例如在下一个数据框中:

 df <- data.frame(time=c(1,2,3,4,5,6,7,1,2,3),
            Individuals=c(1,1,1,1,1,1,1,2,2,2),
            Value=c(1, 2, 3, NA, 5, NA, 7, 5, NA, 7))
  df
Run Code Online (Sandbox Code Playgroud)

我想获得:

 result <- data.frame(time=c(1,2,3,4,5,6,7,1,2,3),
                Individuals=c(1,1,1,1,1,1,1,2,2,2),
                Value=c(1, 2, 3, 4, 5, 6, 7, 5, 5.5, 6))
 result
Run Code Online (Sandbox Code Playgroud)

我不能完全使用na.approx包的功能,zoo因为所有观察都不是连续的,一些观察属于一个人,其他观察属于其他人。原因是因为如果第二个人将第一次观察到NA而我将专门使用该功能na.approx,我将使用来自 的信息individual==1来插入NAindividual==2(例如,下一个数据帧将有此类错误)

  df_2 <- data.frame(time=c(1,2,3,4,5,6,7,1,2,3),
                Individuals=c(1,1,1,1,1,1,1,2,2,2),
                Value=c(1, 2, 3, NA, 5, NA, 7, NA, 5, 7))
  df_2
Run Code Online (Sandbox Code Playgroud)

我试过使用这些包zoodplyr

library(dplyr)
library(zoo)
proof <- df %>%
  group_by(Individuals) %>%
  na.approx(df$Value)
Run Code Online (Sandbox Code Playgroud)

但我不能 …

group-by r linear-interpolation zoo dplyr

7
推荐指数
2
解决办法
5007
查看次数

计算由分号按名称分组的累积唯一因子

这就是我的数据框架的样子.最右边的两列是我想要的列.我计算每行的唯一FundTypes的累计数量.第4列是所有"ActivityType"的累积唯一计数,第5列是仅"ActivityType =="Sale"的累积唯一计数.

dt <- read.table(text='

Name      ActivityType     FundType  UniqueFunds(AllTypes) UniqueFunds(SaleOnly)         

John       Email               a            1                     0
John       Sale                a;b          2                     2 
John       Webinar             c;d          4                     2
John       Sale                b            4                     2
John       Webinar             e            5                     2
John       Conference          b;d          5                     2
John       Sale                b;e          5                     3
Tom        Email               a            1                     0
Tom        Sale                a;b          2                     2 
Tom        Webinar             c;d          4                     2
Tom        Sale                b            4                     2
Tom        Webinar             e            5                     2
Tom        Conference          b;d          5                     2
Tom        Sale                b;e;f        6                     4 …
Run Code Online (Sandbox Code Playgroud)

r zoo dplyr data.table

7
推荐指数
2
解决办法
171
查看次数

Error when performing an NA replacement in R 4.0

使用 R 3.6 我可以执行以下 NA 替换

> d <- zoo(data.frame(a = NA, b = 1), Sys.Date())
> d[is.na(d)] <- 1
> d
           a b
2021-03-03 1 1
Run Code Online (Sandbox Code Playgroud)

使用 R 4.0 我收到以下错误:

> d <- zoo(data.frame(a = NA, b = 1), Sys.Date())
> d[is.na(d)] <- 1
Error in as.Date.default(e) : 
  do not know how to convert 'e' to class “Date”
Run Code Online (Sandbox Code Playgroud)

R 4.0 中的某些默认行为是否发生了变化?

R 3.6 会话信息:

Microsoft Windows [Version 10.0.19041.804]
(c) 2020 Microsoft Corporation. All rights reserved.

C:\>R --no-site-file

R version …
Run Code Online (Sandbox Code Playgroud)

r zoo

7
推荐指数
1
解决办法
121
查看次数