R 使用lappy和split执行上一个勾号聚合

R 使用lappy和split执行上一个勾号聚合,r,aggregate,xts,lapply,R,Aggregate,Xts,Lapply,在过去的三个月里,我一直在努力解决这个问题。请帮忙 我有属于同一交易所的许多股票的滴答数据(价格和成交量)。每个股票在硬盘上都有自己的.rds文件。我有兴趣清理它: 通过取中间值合并多个相同的时间戳 仅用于exchange小时数的子集数据 通过上一次勾选聚合在20分钟内进行聚合 我知道 高频封装中的函数集合 可以执行上一个勾号聚合操作。但是,该函数只获取一个股票的一天数据 为了说明这个问题,我使用了单个股票的原始交易数据(命名交易) dput(head(trade,50)) struct

在过去的三个月里,我一直在努力解决这个问题。请帮忙

我有属于同一交易所的许多股票的滴答数据(价格和成交量)。每个股票在硬盘上都有自己的
.rds
文件。我有兴趣清理它:

  • 通过取中间值合并多个相同的时间戳

  • 仅用于exchange小时数的子集数据

  • 通过上一次勾选聚合在20分钟内进行聚合

  • 我知道

    高频封装中的函数集合

    可以执行上一个勾号聚合操作。但是,该函数只获取一个股票的一天数据

    为了说明这个问题,我使用了单个股票的原始交易数据(命名交易)

        dput(head(trade,50))
    structure(c(54.7, 54.7, 54.5, 54.5, 54.5, 54.6, 54.6, 54.65, 
    54.65, 54.6, 54.65, 54.65, 54.65, 54.65, 54.7, 54.7, 54.8, 54.8, 
    54.85, 54.85, 54.85, 54.85, 54.8, 54.8, 54.8, 54.8, 54.65, 54.65, 
    54.8, 54.8, 54.8, 54.8, 54.65, 54.65, 54.65, 54.75, 54.65, 54.7, 
    54.7, 54.7, 54.75, 54.75, 54.75, 54.75, 54.75, 54.7, 54.7, 54.7, 
    54.65, 54.65, 8, 542, 110, 600, 88, 200, 150, 100, 700, 250, 
    75, 100, 25, 200, 100, 600, 1546, 940, 100, 6250, 89, 6911, 89, 
    211, 100, 50, 1410, 1090, 913, 4737, 50, 300, 2486, 400, 25, 
    85, 250, 168, 50, 100, 40, 40, 60, 50, 40, 10, 91, 6072, 229, 
    1000), class = c("xts", "zoo"), .indexCLASS = c("POSIXct", "POSIXt"
    ), tclass = c("POSIXct", "POSIXt"), .indexTZ = "Asia/Calcutta", tzone = "Asia/Calcutta", index = structure(c(1459481853, 
    1459481853, 1459482302, 1459482302, 1459482305, 1459482306, 1459482306, 
    1459482307, 1459482307, 1459482308, 1459482312, 1459482314, 1459482314, 
    1459482315, 1459482317, 1459482317, 1459482318, 1459482318, 1459482319, 
    1459482319, 1459482320, 1459482320, 1459482322, 1459482322, 1459482330, 
    1459482330, 1459482331, 1459482331, 1459482336, 1459482336, 1459482337, 
    1459482337, 1459482338, 1459482338, 1459482339, 1459482340, 1459482344, 
    1459482348, 1459482351, 1459482351, 1459482356, 1459482357, 1459482357, 
    1459482361, 1459482362, 1459482364, 1459482367, 1459482367, 1459482369, 
    1459482369), tzone = "Asia/Calcutta", tclass = c("POSIXct", "POSIXt"
    )), .Dim = c(50L, 2L), .Dimnames = list(NULL, c("value", "size"
    )))
    
    我使用以下代码以20分钟为间隔进行先前的勾号聚合:

    require(xts)
    require(highfrequency)
    trade<-xts(trade[,-1], order.by = trade[,1])
    trade2<-do.call(rbind, lapply(split(trade,"days"), mergeTradesSameTimestamp))
    colnames(trade)[c(1,2)]<-c("PRICE", "SIZE")
    trade2<-trade2["T09:30:00/T15:30:00"]
    trade2<-trade2[,1]
    fundo=function(x) aggregatets(FUN = previoustick,on="minutes",k=20, dropna =F)
    

    请建议如何解决此错误。

    基于您提供的有限数据,此代码有效。您的错误是因为没有将对象传递给参数
    ts
    。(同样在你的样本数据中,没有一个滴答声发生在上午9:30之前,因此为了这个答案的再现性,我将其改为上午8:30。也就是说,
    trade2你能通过重新使用一些样本数据使你的示例再现吗?@Konrad我添加了一些数据,请参见。你正在引用的文件和文件名列表将失败
    all.st。)奥克斯。list@Konrad请参阅我使用的产生错误的代码。请详细说明这一点。感谢
    split(trade2,“days”)
    产生错误;没有可用的对象传递给
    aggregates
    。我们可以使用aggregateTrades()而不是aggregatets()吗?@runjumpfly我不明白你在问什么。
    lappy
    可以使用任何有意义的函数。在你的情况下,只需相应地更新
    fundo
    。fundo=function(x)aggregateTrades(tdata=x,FUN=“previoustick”,on=“minutes”,k=20,marketopen=“09:15:00”,marketclose=“15:30:00”)trade 3
    trade3<-do.call(rbind, lapply(split(trade2, "days"), fundo))
    
        trade3<-do.call(rbind, lapply(split(trade2, "days"), fundo))
    Error in FUN != "previoustick" : 
      comparison (2) is possible only for atomic and list types
    Called from: aggregatets(FUN = previoustick, on = "minutes", k = 20, dropna = F)
    
    trade <- structure(c(54.7, 54.7, 54.5, 54.5, 54.5, 54.6, 54.6, 54.65, 
        54.65, 54.6, 54.65, 54.65, 54.65, 54.65, 54.7, 54.7, 54.8, 54.8, 
        54.85, 54.85, 54.85, 54.85, 54.8, 54.8, 54.8, 54.8, 54.65, 54.65, 
        54.8, 54.8, 54.8, 54.8, 54.65, 54.65, 54.65, 54.75, 54.65, 54.7, 
        54.7, 54.7, 54.75, 54.75, 54.75, 54.75, 54.75, 54.7, 54.7, 54.7, 
        54.65, 54.65, 8, 542, 110, 600, 88, 200, 150, 100, 700, 250, 
        75, 100, 25, 200, 100, 600, 1546, 940, 100, 6250, 89, 6911, 89, 
        211, 100, 50, 1410, 1090, 913, 4737, 50, 300, 2486, 400, 25, 
        85, 250, 168, 50, 100, 40, 40, 60, 50, 40, 10, 91, 6072, 229, 
        1000), class = c("xts", "zoo"), .indexCLASS = c("POSIXct", "POSIXt"
        ), tclass = c("POSIXct", "POSIXt"), .indexTZ = "Asia/Calcutta", tzone = "Asia/Calcutta", index = structure(c(1459481853, 
        1459481853, 1459482302, 1459482302, 1459482305, 1459482306, 1459482306, 
        1459482307, 1459482307, 1459482308, 1459482312, 1459482314, 1459482314, 
        1459482315, 1459482317, 1459482317, 1459482318, 1459482318, 1459482319, 
        1459482319, 1459482320, 1459482320, 1459482322, 1459482322, 1459482330, 
        1459482330, 1459482331, 1459482331, 1459482336, 1459482336, 1459482337, 
        1459482337, 1459482338, 1459482338, 1459482339, 1459482340, 1459482344, 
        1459482348, 1459482351, 1459482351, 1459482356, 1459482357, 1459482357, 
        1459482361, 1459482362, 1459482364, 1459482367, 1459482367, 1459482369, 
        1459482369), tzone = "Asia/Calcutta", tclass = c("POSIXct", "POSIXt"
        )), .Dim = c(50L, 2L), .Dimnames = list(NULL, c("value", "size"
        )))
    
    # mergeTradesSameTimestamp wants "PRICE" column, so rename now:
    colnames(trade) <- c("PRICE", "SIZE")
    
    trade2<-do.call(rbind, lapply(split(trade,"days"), mergeTradesSameTimestamp))
    trade2<-trade2["T08:30:00/T15:30:00"]
    # Your error was from not passing through x to argument ts:
    fundo=function(x) aggregatets(ts = x, FUN = "previoustick",on="minutes",k=20, dropna =F)
    trade3<-do.call(rbind, lapply(split(trade2, "days"), fundo))