我在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) 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)
谢谢
我有多个时间序列数据图,我需要在每个图中有一条水平线,但是水平值不同(例如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) 我想将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) 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()的组合来实现,但我想知道是否已经存在可以执行相同操作的函数.
我确实有丢失数据的问题,但我没有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?我想用线性插值填充缺失值.
谢谢您的帮助!
我正在使用类似于以下摘录的数据集:
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) 我想在数据帧的变量中执行线性插值,其中考虑到: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来插入NA的individual==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)
我试过使用这些包zoo和dplyr:
library(dplyr)
library(zoo)
proof <- df %>%
group_by(Individuals) %>%
na.approx(df$Value)
Run Code Online (Sandbox Code Playgroud)
但我不能 …
这就是我的数据框架的样子.最右边的两列是我想要的列.我计算每行的唯一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 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 ×10
zoo ×10
time-series ×3
xts ×3
dplyr ×2
as.date ×1
data.table ×1
diff ×1
ggplot2 ×1
group-by ×1
plot ×1
statistics ×1