2015-12-15 9 views
2

Пример данных:Используйте XTS в виде таблицы перекодировки

library(xts) 
a <- seq(as.POSIXct("2010-01-01 00:00:00"), by = 600, length.out = 3) 
b <- c(a, a) 
lu <- xts(seq_along(a), a) 
lu[b] 

        [,1] 
2010-01-01 00:00:00 1 
2010-01-01 00:10:00 2 
2010-01-01 00:20:00 3 

Как можно «посмотреть» значения lu для временных меток в b таким образом, что каждый получает, например, Н. XTS объект с такой же длины, как и b, в данном случае:

    [,1] 
2010-01-01 00:00:00 1 
2010-01-01 00:10:00 2 
2010-01-01 00:20:00 3 
2010-01-01 00:00:00 1 
2010-01-01 00:10:00 2 
2010-01-01 00:20:00 3 

ответ

3

1) индекс по имени XTS не является действительно правильный пакет, чтобы сделать это, так как ваш желаемый результат не может быть объектом действительный XTS. Вместо этого попробуйте следующее, которое не использует никаких пакетов. Имена выходного вектора являются символьными представлениями времени и вектор самих значений являются искомыми значения:

lutable <- setNames(seq_along(a), a) 
lutable[format(b)] 

дает:

2010-01-01 00:00:00 2010-01-01 00:10:00 2010-01-01 00:20:00 2010-01-01 00:00:00 2010-01-01 00:10:00 2010-01-01 00:20:00 
        1     2     3     1     2     3 

2) матч Другой возможность просто использовать match как это. В результате значения, которые соответствуют времени в b:

v <- seq_along(a) # test values 
v[match(b, a)] 
## [1] 1 2 3 1 2 3 
+0

ad 1) Объекты xts могут содержать повторяющиеся метки времени, но я думаю, что вы имели в виду, что семантика будет сомнительной в этом случае. Ad 2), это то, что я использовал с помощью 'data.frame' a la' df [match (b, a),] '. Огромное спасибо. – phaebz

+0

Да, объекты xts могут иметь повторяющиеся метки времени, но это не имеет особого значения, поскольку они все еще не могут представлять желаемый результат, поскольку они всегда упорядочены. –

+0

А, да, я проверил заказ, спасибо за разъяснение. – phaebz

1

Существует небольшая проблема, в результате чего вы ожидаете; XTS заказывает метку времени по умолчанию. Таким образом, результаты объекта XTS будут 1,1,2,2,3,3.

Следующая может дать вам некоторое представление:

lu[match(b, index(lu))] #XTS object returned - Timestamps are ordered by default 
data.frame(ts = index(lu), lu) [match(b, index(lu)),] #Using dataframes instead reproduce the expected result. 
+0

спасибо за давая мне знать, и 'data.frame' пример. Так что 'xts' действительно не подходит для этого. – phaebz