2014-06-23 4 views
-3

데이터 프레임에서 주식 데이터를 생성해야합니다. 데이터 프레임에는 항목의 재고 기간을 나타내는 시작일과 종료일이 포함됩니다. 항목 당 재고 수준을 집계하고 데이터와 함께 시계열을 만들고 싶습니다.R - 시작일과 종료일이있는 데이터 프레임에서 주식 데이터 생성

A <- c("a","b","a","b","c") 
begindate <- as.Date(c("2014-01-01", "2014-01-03", "2014-01-03", "2014-01-02", "2014-01-02")) 
enddate <- as.Date(c("2014-01-04", "2014-01-05", "2014-01-06", "2014-01-04", "2014-01-06")) 
source <- data.frame(A, begindate, enddate) 
source 
    A begindate enddate 
1 a 2014-01-01 2014-01-04 
2 b 2014-01-03 2014-01-05 
3 a 2014-01-03 2014-01-06 
4 b 2014-01-02 2014-01-04 
5 c 2014-01-02 2014-01-06 

내가이 데이터에서 만들려는 것은

2014-01-01 2014-01-02 2014-01-03 2014-01-04 2014-01-05 2014-01-06 
a 1 1 2 2 1 1 
b  1 2 2 1 
c  1 1 1 1 1 

원본 데이터 같은 시간 시리즈는 약 180K 행 오히려 큰입니다 :

나는 형태의 데이터를 가지고있다. 이 일을하는 효과적인 방법은 무엇입니까?

편집

데이비드 Arenburg에 의해 주어진 대답은 잘

library(data.table) 
library(reshape2) 
setDT(mydata)[, indx := .I] 
mydata <- mydata[, list(A = A, seq(begindate, enddate, by = 1)), by = indx] 

일을하지만 내 데이터를 오히려 느렸다. 중간 단계를 추가하면 주조 작업이 크게 빨라졌습니다. 데이터 세트가 큰 경우

# intermediate step (pre-aggregation) 
mydata_aggregated <- mydata[, list(number_cases = length(indx)), by = list(A, V2)] 
# casting over the aggregated list 
mydata_series <- dcast(mydata_aggregated, V2 ~ A, value.var = "number_cases") # note 
# that I switched the rows and columns, since I found that its easier to pass this 
# data to zoo or xts 

# creating the zoo object 
mydata_zoo <- zoo(mydata_series[,-1],mydata_series[,1]) 
+0

나는 R에서 시계열에 대해 다소 새로운 편이다. 내가 시도한 것은 seq (begindate, enddate) 객체를 만드는 것이지만, 그것들은 모두 서로 다른 시작과 끝 날짜를 가지기 때문에 객체를 집계하는 방법을 모른다. – Chris

+0

이 질문은 너무 광범위하지 않으며 그가 무엇을 요구하고 있는지 분명합니다. 그 두 가지 이유 때문에 그것을 닫을 필요가 없습니다. –

+0

질문이 해결되었습니다. 그걸로 표시 할 수 있습니까? – Chris

답변

1

, 당신의 데이터에 대한 다른 이름을 사용하려고 따라서, source는 R에 저장된 기능입니다 data.table

library(data.table) 
library(reshape2) 
setDT(source)[, indx := .I] 
source <- source[, list(A = A, seq.int(begindate, enddate, by = 1)), by = indx] 
dcast.data.table(source, A ~ V2, value.var = "V2", length) 

## A 2014-01-01 2014-01-02 2014-01-03 2014-01-04 2014-01-05 2014-01-06 
##1 a   1   1   2   2   1   1 
##2 b   0   1   2   2   1   0 
##3 c   0   1   1   1   1   1 

그냥 보조 노트를 사용하는 것은

설정
+0

감사합니다! 이것은 내가 찾고 있었던 바로 그 것이었다! – Chris

+0

솔루션이 작동하는 것처럼 보입니다. 프로세스가 약 2 시간이 지나서 실행 중이며 여전히 계산이 완료되지 않았기 때문인 것으로 보입니다. 내 원래의 데이터는 ~ 18k 다른 인덱스를 가지고있다 (리스트 함수에 의해 생성 된 중간 테이블은 6 백만 행이다). – Chris

+0

R은 다 변수 시계열 형식을 처리 할 수 ​​있다는 것을 알고 있습니다. xts 및 동물원은 다 변수 시계열을 처리 할 수 ​​있지만 데이터의 각 행이 동일한 날짜 (내가 요구 한 행렬의 전치 버전)를 필요로합니다. 중간 행렬없이 시계열 객체를 만드는보다 효과적인 방법이 있습니까? 데이터에는 ~ 18k 개의 고유 인덱스가 있고 집중된 형식으로는 거의 75k 개의 관측치가 있습니다. 필요한 날짜 범위는 일일 데이터와 함께 최소 1 년입니다. 이 계산을 처리하는보다 효과적인 방법을 알고 계십니까? 또는 중간 매트릭스 주위에 방법이 있습니까? – Chris