2011-03-17 4 views
4

R데이터는 R의 가변 길이 데이터 프레임/Splus

myarray <- as.array(list(c(5,5), 9, c(4,2,2,4,6))) 
mydf <- as.data.frame(myarray) 

에서 그러나 Splus에서 미세 다음 작품 그것을하지 않습니다 --- 오류 메시지를 제공합니다 :

Problem in data.frameAux.list(x, na.strings = na.st..: arguments imply differing 
number of rows: 2, 1, 5 
Use traceback() to see the call stack 

Q : 무슨 일이야? Splus에서 어떻게 작동합니까?

편집 : listdata.frame으로 처리하는 이상한 과정을 거쳐야하는 이유를 명확히해야합니다.

mytshack <- list(mypos, as.list(myarray)) 

하지만이 :

지금 가장 실현 가능한 옵션
mypos <- timeSeq("1/1/08", "1/3/08", by = "days") 
myts <- timeSeries(data = mydf, positions = mypos) 

는, 내 생각, 같은 목록을 작성하는 것입니다 : 나는 결국 Splus에 다음과 같은 일을하고 싶습니다 때문이다 clunky이고 가능한 경우 timeSeries의 기능을 얻고 싶습니다.

답변

3

EDITED 후 댓글.

SPlus는 dataframe의 값으로 벡터, R. 반대로 당신은 그것에 대한 목록을 사용해야합니다 허용하지 않습니다, 나는 간단 할 거라고 : 데이터에 액세스 할 수 있습니다

day <- c("1/1/2000","1/2/2000","1/3/2000") 
names(myarray) <- day 

일반적인 방법 :

당신이 당신이 원하는 것을 실제로 확인하고 데이터 세트에 대한 추가 정보를 감안할 때
> myarray[["1/1/2000"]] 
[1] 5 5 

,이 시도 :

myarray <- as.array(list(c(5,5), 9, c(4,2,2,4,6))) 
mydf <- as.matrix(myarray) 
colnames(mydf) <- "myarray" 


mypos <- timeSeq("1/1/08", "1/3/08", by = "days") 
myts <- timeSeries(data = mydf, positions = mypos) 
seriesData(myts) 

이것은 SPlus에서 작동합니다. timeSeries는 직사각형 객체가 필요하고 as.rectangular는 배열을 처리 할 수 ​​없습니다. 따라서 행렬로 변환하면됩니다. 그럼에도 불구하고, SPlus에서 함께 해킹하는 대신 R에서 패키지 timeSeries을 사용합니다.

+0

@Joris : 음, 그것은 내가 원했던 것입니다. 내가 언급하지 않은 것은'1, 2, 3'은 실제로 달력 날짜와 일치하고 '5, 5'는 5 일 각각 5 번 이벤트에 해당하며 1 일 이내에 발생한다는 것입니다. 이것을'timeSeries' 객체로 바꾸십시오. – lowndrul

+0

@brianjd : 왜'as.data.frame'을'list' 대신에 사용합니까? –

+0

@Joris :'list '를'data.frame'으로 취급하고있는 배경 정보를 포함하도록 원래 질문을 편집했습니다. 결국'data.frame'에서'timeSeries' 객체를 만들고 날짜별로 하위 집합과 같은 일을 할 수 있기를 바랍니다. 내가 편집 (실제로는 유일한 옵션처럼 보입니다)에서 언급 한 것처럼 모든 것을 (날짜를 포함한) 목록에 넣을 수는 있지만 날짜에 해당하는 데이터의 하위 요소에 액세스하는 것은 어색하고 도우미 기능이 필요합니다. Btw, 지금까지의 토론에 감사드립니다. 고맙습니다! – lowndrul