【发布时间】:2016-03-23 09:38:13
【问题描述】:
我正在处理时间序列股票市场数据,并且需要以毫秒为单位汇总数据。我已经想出了如何做到这一点,但它不能按照我想要的方式使用 previoustick() 或 last()。
cuts = seq.POSIXt(from = min(A$DateTime), to = max(A$DateTime), by = by)
my_df = data.frame(DateTime=A$DateTime, MQ=A$MQ)
my_df$Time = cut(my_df$DateTime, breaks = cuts)
avgvwap = ddply(my_df, .(Time), summarize, MQ=mean(MQ), .drop = FALSE)
length(cuts)
[1] 227252
nrow(avgvwap)
[1] 227252
这正是我想要的,就像aggregatets() 函数一样,除了在我使用previoustick() 或last() 作为函数而不是mean() 或sum() 的情况下。
.drop = FALSE 基本上保留了没有可用数据的时间范围。它只是在空的时间范围内给了我一个 NA 或 NAN。这可以完美地处理平均值或总和,但不会为 last() 或 previoustick() 保留它,即使我设置了 '.drop = FALSE'
avgvwap = ddply(my_df, .(Time), summarize, MQ=previoustick(MQ), .drop = FALSE)
nrow(avgvwap)
[1] 98890
如您所见,行数减少了,因为它抛出了空的时间范围。如果我使用last() 而不是previoustick(),它会做同样的事情
如何在不丢弃空时间框架的情况下获得上一个或最后一个工作? 这个函数会不会完全处理不了?
我应该使用其他函数来代替 last 或 previoustick 吗?是总结问题吗?还是我不应该使用ddply?
【问题讨论】:
-
请提供一个可复制的示例,准备好复制粘贴运行,包含包、虚拟数据和您的代码。
-
dput(A[50,]) structure(list(DateTime = structure(1448855100.421, class = c("POSIXct", "POSIXt"), tzone = "Asia/Kolkata"), BWAP = 80901.875, AWAP = 82814.2857142857, MQ = 81858.0803571429), .Names = c("DateTime", "BWAP", "AWAP", "MQ"), row.names = 50L, class = "data.frame") -
@lukeA 我使用的包是
highfrequency、xts、zoo和plyr