2016-10-23 3 views
1

나는 적절한 분이 예 : 09:15:00, 09:16:00 등과 같이 적절한 분에 NAs를 포함하고자하는 불규칙한 xts 시리즈를 가지고 있습니다. 거기에서 놓치기. 이 타임 스탬프가있는 NA 시리즈가있는 또 다른 시리즈를 만들면서이 작업을 수행하고 있습니다.특정 타임 스탬프에서 NAs를 만들기 위해 두 xts를 병합

dput(data1) 
structure(c(108.4, 108.35, 108.35, 108.4, 108.2, 108.35, 108.25, 
108.25, 108.25, 108.25, 108.25, 108.25, 108.35, 108.3, 108.25, 
108.3, 108.25, 108.25, 108.2, 108.15, 108.2, 108.1, 108.25, 108.25, 
108.1, 108.2, 108.25, 108.15, 108.15, 108.1, 108.2, 108.1, 108.25, 
108.3, 108.25, 108.2, 108.2, 108.2, 108.1, 108.1, 108.1, 108.1, 
108.1, 108.15, 108.15, 108.05, 108.1, 108, 108, 108, 108.1, 108.05, 
108, 108.05, 108, 108.05, 107.9, 107.95, 107.85, 107.85, 107.85, 
107.85, 107.9, 107.9, 107.9, 108, 107.85, 107.9, 107.9, 107.9, 
108, 107.9, 108, 108, 108, 107.95, 107.95, 108, 108, 108, 108, 
107.95, 108, 108, 108, 108.05, 108.05, 108.1, 108.05, 108.1, 
108.1, 108.1, 108.1, 108.1, 108.15, 108.05, 108.1, 108.05, 108.05, 
108.05), .indexCLASS = c("POSIXct", "POSIXt"), .indexTZ = "Asia/Calcutta", tclass = c("POSIXct", 
"POSIXt"), tzone = "Asia/Calcutta", index = structure(c(1459481851, 
1459482301, 1459482303, 1459482304, 1459482305, 1459482306, 1459482307, 
1459482308, 1459482309, 1459482310, 1459482311, 1459482312, 1459482313, 
1459482314, 1459482315, 1459482316, 1459482317, 1459482318, 1459482319, 
1459482320, 1459482321, 1459482322, 1459482323, 1459482324, 1459482325, 
1459482326, 1459482327, 1459482328, 1459482329, 1459482330, 1459482331, 
1459482332, 1459482333, 1459482334, 1459482335, 1459482336, 1459482337, 
1459482339, 1459482340, 1459482341, 1459482342, 1459482343, 1459482344, 
1459482345, 1459482347, 1459482348, 1459482349, 1459482350, 1459482351, 
1459482352, 1459482353, 1459482354, 1459482355, 1459482356, 1459482357, 
1459482358, 1459482360, 1459482361, 1459482362, 1459482363, 1459482364, 
1459482365, 1459482366, 1459482367, 1459482368, 1459482369, 1459482370, 
1459482371, 1459482372, 1459482374, 1459482375, 1459482376, 1459482377, 
1459482378, 1459482379, 1459482380, 1459482381, 1459482382, 1459482384, 
1459482385, 1459482386, 1459482387, 1459482388, 1459482389, 1459482390, 
1459482392, 1459482393, 1459482394, 1459482395, 1459482396, 1459482397, 
1459482398, 1459482399, 1459482401, 1459482402, 1459482403, 1459482404, 
1459482405, 1459482406, 1459482407), tzone = "Asia/Calcutta", tclass = c("POSIXct", 
"POSIXt")), .Dim = c(100L, 1L), .Dimnames = list(NULL, "SYMBOL"), class = c("xts", "zoo")) 

NA 시리즈 : : 이것은 내 코드입니다

dput(NA.df) 
structure(c(NA, NA, NA), class = c("xts", "zoo"), .indexCLASS = c("POSIXct", 
"POSIXt"), tclass = c("POSIXct", "POSIXt"), .indexTZ = structure("Asia/Calcutta", .Names = "TZ"), tzone = structure("Asia/Calcutta", .Names = "TZ"), index = structure(c(1459741500, 
1459741560, 1459741620), tzone = structure("Asia/Calcutta", .Names = "TZ"), tclass = c("POSIXct", 
"POSIXt")), .Dim = c(3L, 1L), .Dimnames = list(NULL, "Empty")) 

: 이 내 일련의

data2<-merge(data1,NA.df, all=TRUE)[,1:ncol(data1)] 

이 결과 :

dput(data2) 
structure(c(108.4, 108.35, 108.35, 108.4, 108.2, 108.35, 108.25, 
108.25, 108.25, 108.25, 108.25, 108.25, 108.35, 108.3, 108.25, 
108.3, 108.25, 108.25, 108.2, 108.15, 108.2, 108.1, 108.25, 108.25, 
108.1, 108.2, 108.25, 108.15, 108.15, 108.1, 108.2, 108.1, 108.25, 
108.3, 108.25, 108.2, 108.2, 108.2, 108.1, 108.1, 108.1, 108.1, 
108.1, 108.15, 108.15, 108.05, 108.1, 108, 108, 108, 108.1, 108.05, 
108, 108.05, 108, 108.05, 107.9, 107.95, 107.85, 107.85, 107.85, 
107.85, 107.9, 107.9, 107.9, 108, 107.85, 107.9, 107.9, 107.9, 
108, 107.9, 108, 108, 108, 107.95, 107.95, 108, 108, 108, 108, 
107.95, 108, 108, 108, 108.05, 108.05, 108.1, 108.05, 108.1, 
108.1, 108.1, 108.1, 108.1, 108.15, 108.05, 108.1, 108.05, 108.05, 
108.05, NA, NA, NA), index = structure(c(1459481851, 1459482301, 
1459482303, 1459482304, 1459482305, 1459482306, 1459482307, 1459482308, 
1459482309, 1459482310, 1459482311, 1459482312, 1459482313, 1459482314, 
1459482315, 1459482316, 1459482317, 1459482318, 1459482319, 1459482320, 
1459482321, 1459482322, 1459482323, 1459482324, 1459482325, 1459482326, 
1459482327, 1459482328, 1459482329, 1459482330, 1459482331, 1459482332, 
1459482333, 1459482334, 1459482335, 1459482336, 1459482337, 1459482339, 
1459482340, 1459482341, 1459482342, 1459482343, 1459482344, 1459482345, 
1459482347, 1459482348, 1459482349, 1459482350, 1459482351, 1459482352, 
1459482353, 1459482354, 1459482355, 1459482356, 1459482357, 1459482358, 
1459482360, 1459482361, 1459482362, 1459482363, 1459482364, 1459482365, 
1459482366, 1459482367, 1459482368, 1459482369, 1459482370, 1459482371, 
1459482372, 1459482374, 1459482375, 1459482376, 1459482377, 1459482378, 
1459482379, 1459482380, 1459482381, 1459482382, 1459482384, 1459482385, 
1459482386, 1459482387, 1459482388, 1459482389, 1459482390, 1459482392, 
1459482393, 1459482394, 1459482395, 1459482396, 1459482397, 1459482398, 
1459482399, 1459482401, 1459482402, 1459482403, 1459482404, 1459482405, 
1459482406, 1459482407, 1459516500, 1459516560, 1459516620), tzone = "Asia/Calcutta", tclass = c("POSIXct", 
"POSIXt")), class = c("xts", "zoo"), .indexCLASS = c("POSIXct", 
"POSIXt"), .indexTZ = "Asia/Calcutta", tclass = c("POSIXct", 
"POSIXt"), tzone = "Asia/Calcutta", .Dim = c(103L, 1L), .Dimnames = list(
    NULL, "SYMBOL")) 

하지만 그렇지 않은 9시 15 분, 9시 1 분에 NA 6:00 등. 내 코드에서 실수 한 부분을 찾아 내도록 도와주세요. 대신,

> data2<-merge(data1, NA.df) 
> tail(data2) 
        SYMBOL Empty 
2016-04-01 09:16:45 108.05 NA 
2016-04-01 09:16:46 108.05 NA 
2016-04-01 09:16:47 108.05 NA 
2016-04-04 09:15:00  NA NA 
2016-04-04 09:16:00  NA NA 
2016-04-04 09:17:00  NA NA 

당신이 행의 기본 0으로 장소가있는 EmptySYMBOL 일치하지 않는이, 시도, 무슨 일이 명확하게 일어나고 볼 NA의 NA.df에서를 원하기 때문에 : 감사

+0

시간대를 올바르게 일치시키지 않았다고 생각합니다. –

+0

@ 42- NA.df 시간대를 변경했지만 여전히 NA 타임 스탬프가 xts의 마지막 부분에 추가됩니다. – runjumpfly

+0

NA df의 수치 값이 data1 지수의 수치보다 훨씬 크기 때문에 놀랍지 않습니다. –

답변

1

귀하의 출력은 이것이다 기본 NA의 :

> data2<-merge(data1, NA.df, fill = 0) 
> tail(data2) 
        SYMBOL Empty 
2016-04-01 09:16:45 108.05  0 
2016-04-01 09:16:46 108.05  0 
2016-04-01 09:16:47 108.05  0 
2016-04-04 09:15:00 0.00 NA 
2016-04-04 09:16:00 0.00 NA 
2016-04-04 09:17:00 0.00 NA 

나는 당신이 원하는 것은 같은 열에서 NA의이 아마 생각합니다. 이를 수행하려면 동일한 열 이름 ( SYMBOL은 여기에 있음)을 사용하고 merge이 아닌 rbind을 사용해야합니다 ( mergecbind과 같은 두 개의 열을 만듭니다. 열 이름이 동일 함에도 불구하고 별개의 계열이라고 생각하므로).

colnames(NA.df) <- "SYMBOL" 
data2<-rbind(data1, NA.df) 

> tail(data2, 6) 
SYMBOL 
2016-04-01 09:16:45 108.05 
2016-04-01 09:16:46 108.05 
2016-04-01 09:16:47 108.05 
2016-04-04 09:15:00  NA 
2016-04-04 09:16:00  NA 
2016-04-04 09:17:00  NA 

NA.df 프레임이 원하는 시간 스탬프로 잘못 표시되었습니다.

index(NA.df) <- seq(from = as.POSIXct("2016-04-01 09:15:00", tz = "Asia/Calcutta"), length.out = 3, by = "secs") 
data2<-rbind(data1, NA.df) 
> head(data2, 10) 
        SYMBOL 
2016-04-01 09:07:31 108.40 
2016-04-01 09:15:00  NA 
2016-04-01 09:15:01 108.35 
2016-04-01 09:15:01  NA 
2016-04-01 09:15:02  NA 
2016-04-01 09:15:03 108.35 
2016-04-01 09:15:04 108.40 
2016-04-01 09:15:05 108.20 
2016-04-01 09:15:06 108.35 
2016-04-01 09:15:07 108.25 
+0

예, 같은 열에 있으면 좋겠어요. 그러나 그것이 왜 마지막일까요? 09:15:00, 09:15:01, 09:15:03 등이었을 것입니다. – runjumpfly

+0

POSIX 초 안에'NA.df'의 타임 스탬프가'data1' 오브젝트보다 훨씬 큽니다. NA.df의 시간을 data1의 값 안에 넣어야합니다. NA.df 안에있는 'index = structure (c (1459741500, 1459741560, 1459741620)'는'data1'의 최대 값 (최대 = 1459482407)보다 훨씬 큰 값입니다. – FXQuantTrader

+0

@runjumpfly 수정 된 답변 – FXQuantTrader