2016-11-25 6 views
0

를 사용하여 처리 내가 형식의 시계열 데이터를시계열 데이터 집계 및 NA는 R

     Ask Bid Trade Ask_Size Bid_Size Trade_Size 
2016-11-01 01:00:03  NA 938.10  NA  NA  203   NA 
2016-11-01 01:00:04  NA 937.20  NA  NA  100   NA 
2016-11-01 01:00:04 938.00  NA  NA  28  NA   NA 
2016-11-01 01:00:04  NA 938.10  NA  NA  203   NA 
2016-11-01 01:00:04 939.00  NA  NA  11  NA   NA 
2016-11-01 01:00:05  NA 938.15  NA  NA  19   NA 
2016-11-01 01:00:06  NA 937.20  NA  NA  100   NA 
2016-11-01 01:00:06 938.00  NA  NA  28  NA   NA 
2016-11-01 01:00:06  NA  NA 938.10  NA  NA   69 
2016-11-01 01:00:06  NA  NA 938.10  NA  NA  831 
2016-11-01 01:00:06  NA 938.10  NA  NA  134   NA 

시계열 데이터의 구조는

str(df_ts) 

An ‘xts’ object on 2016-11-01 01:00:03/2016-11-02 12:59:37 containing: 
    Data: num [1:35797, 1:6] NA NA 938 NA 939 NA NA 938 NA NA ... 
- attr(*, "dimnames")=List of 2 
    ..$ : NULL 
    ..$ : chr [1:6] "Ask" "Bid" "Trade" "Ask_Size" ... 
    Indexed by objects of class: [POSIXct,POSIXt] TZ: 
    xts Attributes: 
NULL 

내가마다 데이터를 집계하는 것을 시도하고있다 다음 코드를 사용하여 1 분

# Creating a Function 
apply.periodly <- function (x, FUN, period, k = 1, ...) 
{ 
    if (!require("xts")) { 
    stop("Need 'xts'") 
    } 
    ep <- endpoints(x, on = period, k=k) 
    period.apply(x, ep, FUN, ...) 
} 

# Aggregation every minute 

df_aggregate_min <- apply.periodly(x = df_ts, FUN = mean, period = "minutes", k = 1) 

그러나 "NA"로 인해 잘못된 출력이 나옵니다. NA를 무시하여 매분마다 열을 어떻게 집계합니까?

+0

사용자 정의 기능을 의미한다 ('naMean <- 기능 (X) {평균 (X, na.rm = TRUE)}') 트릭 – TBSRounder

+0

감사가해야 할 마지막 줄에하지만, 결과 출력 인 전체 열의 평균, 매분마다 열 현명한 합계를 얻고 싶습니다. 내가 사용한 코드는 df_aggregate_min입니다. <- apply.periodly (x = df_ts, FUN = naMean, period = "minutes", k = 1) – Abhishek

답변

0

이 두 개의 단일 컬럼입니다 :

library(readr) 
library(xts) 
library(lubridate) 
Sys.setenv(TZ = "UTC") 
# hack: in-place edit of infile Sample_HFT.csv 
# replace first comma with "T" to create ISO-datetime strings 
# do this only ONCE! 
system('perl -pi -E "s/,/T/" Sample_HFT.csv') 

hft <- read_csv("Sample_HFT.csv", col_names = TRUE) 
head(hft) 

hft.xts <- as.xts(hft[, -1], order.by = ymd_hms(hft$T)) 
indexFormat(hft.xts) <- "%y-%m-%d %H:%M:%S" 

my.cummean <- function(x) { 
    x2 <- x 
    cummeans <- cumsum(x2[!is.na(x)])/seq_along(x2[!is.na(x)]) 
    cummeans[endpoints(cummeans, "minutes"),] 
} 

ask_minutes <- split(hft.xts$Ask, f = "minutes") 
ask_minutes_cum <- lapply(ask_minutes, my.cummean) 
ask_minutes_mean <- do.call("rbind", ask_minutes_cum) 

trade_size_minutes <- split(hft.xts$Trade_Size, f = "minutes") 
trade_size_minutes_cum <- lapply(trade_size_minutes, my.cummean) 
trade_size_minutes_mean <- do.call("rbind", trade_size_minutes_cum) 

이 원하는 비즈니스 로직의 경우 아직도 모르겠지만, 난 당신이 세부 사항을 알아낼 수 있다고 생각합니다.

head(trade_size_minutes_mean) 
        Trade_Size 
16-11-01 01:00:35 194.500 
16-11-01 01:01:59  59.909 
16-11-01 01:02:48  5.875 
16-11-01 01:03:34  6.000 
16-11-01 01:08:57  3.889 
16-11-01 01:09:29  1.682 
+0

도와 주시겠습니까? 위의 방법은 효과가 없습니다. 데이터 샘플에 대한 링크 공유 https://www.dropbox.com/s/m94y6pbhjlkny1l/Sample_HFT.csv?dl=0 – Abhishek

+0

답변을 업데이트했습니다. 질문 본문에 샘플 파일 링크를 넣을 수 있습니까? 그런 다음 R 코드로 솔루션을 제공 할 의사가있는 독자에게 더 눈에 띄게됩니다. – knb