2011-09-05 5 views
2

나는 한달 동안의 변화를 테스트하는데 사용할 수있는 변수가있는 동물원 객체를 보강하고 싶습니다. 이 작업을 수행하는 더 일반적인 방법이있을 것이라고 확신합니다. 제안은 훌륭하지만,이 간단한 접근이 실패하는 이유를 이해하고 싶습니다. 여기에 실종 된 내용을 이해하면 기분이 나아질 것입니다. ;-)동물원에서 개월 작업하기

동물원 객체 용

library(zoo) 
tz <- structure(c(7L, 7L, 1L, 6L, 0L, 9L, 0L, 1L, 6L, 0L, 3L, 3L, 5L, 
0L, 8L, 2L, 0L, 3L, 2L, 5L, 2L, 3L, 4L, 7L, 8L, 9L, 0L, 1L, 4L, 
5L, 6L, 7L, 8L, 2L, 3L, 4L, 5L, 8L, 9L, 0L), .Dim = c(20L, 2L 
), .Dimnames = list(NULL, c("x", "y")), index = structure(c(13880, 
13881, 13913, 13916, 13946, 13947, 13948, 13980, 13983, 13984, 
13985, 14016, 14048, 14082, 14083, 14115, 14147, 14180, 14212, 
14243), class = "Date"), class = "zoo") 

as.yearmon()을 사용하여 1 년/월 변수를 추가하는 것이 쉬운 것처럼 보입니다. 나는 데이터 프레임에 있다면 이것은 미세 문자 변수를 얻을 것입니다,하지만 당신은 as.numeric()

tz$yrmo <- as.numeric(as.yearmon(index(tstz))) 
> head(tz) 
      x y  yrmo 
2008-01-02 7 2 2008.000 
2008-01-03 7 3 2008.000 
2008-02-04 1 4 2008.083 
2008-02-07 6 7 2008.083 
2008-03-08 0 8 2008.167 
2008-03-09 9 9 2008.167 

이 멋지다 내가 성공적으로

를 데이터 요소를 비교할 수에 포장하는 것을 잊지 경우 동물원에 비극은 계속된다

(TZ의 $의 X [6]! = TZ의 $ y를 [6])
2008년 3월 9일
FALSE

하지만이 결과를 얻는 이유는 비교 년/월 변수 르?

> (tz$yrmo[2] != tz$yrmo[1]) 
Data: 
logical(0) 

Index: 
character(0) 

왜 이런 식으로 yearmon 또는 데이터 항목을 테스트하는 것이 실패합니까? (둘 다 맞아야한다)

> identical(tz$yrmo[2] , tz$yrmo[1]) 
[1] FALSE 
> identical(tz$x[2] , tz$x[1]) 
[1] FALSE 

나는 동물원에서 색인 클래스를 생성하는 yearmon()을 사용하여 불을 질렀다. Dirk Eddelbuettel의 '월 단위로 날짜 바꾸기'와 같은 것으로 전환해야합니까? Number of months between two dates

답변

3

1 : 데이터 및 색인 섹션이있는 출력의 단서는 이것들이 동물원 개체라는 것입니다. 그래서 그들은 비교되는 Index 속성을 가지며 그것들은 동일하지 않습니다. 당신이 값을 비교 원하는 경우에 당신이 coredata()를 액세스 할 수 있습니다 :

> (coredata(tz$yrmo[2]) != coredata(tz$yrmo[1])) 
[1] FALSE 
> coredata(tz$yrmo[2]) 
[1] 2008 
> coredata(tz$yrmo[1]) 
[1] 2008 

Q2 : 단지 숫자 값보다 identical 검사보다. 또한 모든 속성의 동등성을 결정합니다.

> attributes(tz$yrmo[2]) 
$index 
[1] "2008-01-03" 

$class 
[1] "zoo" 
+0

매우 도움이됩니다. 두 가지 질문에 모두 답변하고 문제를 해결하는 방법을 보여줍니다. – BobH

+0

그리고 올바르게 작동하는 것으로 보이는 첫 번째 테스트 (tz $ x [6]! = tz $ y [6])는 임의로 동일한 인덱스가있는 두 값을 비교 한 결과에 따라 달라집니다. 값은 같지만 인덱스가 다른 곳에 시도해 보았을 때 실패했을 것입니다 (tz $ x [2]! = tz $ y [4]). – BobH