Вопрос

Я хотел бы увеличить объект зоопарка с переменной, которую я мог бы использовать для тестирования на месячные изменения. Я уверен, что есть более общие способы сделать это. Предложения там было бы здорово, но я хотел бы понять, почему этот простой подход терпит неудачу. Я бы почувствовал себя лучше, если бы я понял, что мне здесь не хватает ;-)

Например, для объекта зоопарка

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 () кажется достаточно простым. Если бы я был в рамке данных, это дало бы прекрасную переменную символа, но в зоопарке последовала трагедия, если вы забудете обернуть 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-03-09
ЛОЖНЫЙ

Но почему я получаю этот результат, когда сравниваю переменную года/месяц?

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

Index:
character(0)

И почему тестирование годом или элементов данных с помощью идентичного () терпит неудачу таким образом? (Оба должны быть правдой)

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

Я просто играю с Fire в использовании Modmon (), который создает класс индекса в зоопарке? Должен ли я перейти на что -то вроде Дирка Эддельбуэттеля «Превращение даты в месяц»? Количество месяцев между двумя датами

Это было полезно?

Решение

Q1: Подсказка на выводе, имеющая данные и раздел индекса, заключается в том, что это объекты зоопарка. Таким образом, у них есть индексные атрибуты, которые также сравниваются, и они не равны. Если вы хотите сравнить значения, вы можете получить доступ к 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"
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top