2016-01-11 6 views
0

У меня есть объект списка xts, я пытаюсь получить даты, присутствующие в моем списке, затем в векторе, который будет использоваться последним как индекс xts в дальнейшей обработке. Хотя мои данные включают отметку времени, для этой иллюстрации я собираю данные YHOO из Google. Эти данные не имеют элемента времени только даты, но это достаточно хорошо. Вам нужно quantmod. Я тяну данные, а затем создать список разделить YHOO на недельные субкомпонентами со следующим кодом:strptime() ведет себя по-разному в анонимной функции, чем я ожидал

library(quantmod) 
library(xts) 

getSymbols("YHOO",src="google") 
yhooL <- split.xts(YHOO,"weeks") 

Чтобы получить дату из первой части yhooL я прохожу этот код:

strptime(index(yhooL[[1]][1]),format="%Y-%m-%d") 

Работает так, как ожидалось, и я получаю свою дату. Но чтобы получить все даты из первой строки каждой недели, используя vapplystrptime() возвращает все свои одиннадцать элементов $ sec, $ min ... days, week of year. Это не дает мне дату в формате, который я предоставил. То, что я пытаюсь достичь, - это вернуть дату из первой строки в этом конкретном формате. Я не уверен, что значение для передачи аргумента FUN.VALUE из vapply()

vapply(yhooL, function(i) {strptime(index(i[1,]), format ="%Y-%m-%d")},double(1)) 

Я также попытался POSIXct(1) для FUN.VALUE и кучу других, догадывался без удачи на самом деле.

+0

Можете ли вы попробовать как.Date()? – Gopala

+0

для FUN.VALUE? если это то, что вы имели в виду, потому что ошибка возникает, потому что strptime() возвращает 11 элементов, и функция ожидает 1. Это 11 per (i) вместо 1 per (i). – user3507767

+0

'strptime' преобразует строки в объекты POSIXlt. 'index' возвращает объект, основанный на времени. Итак, непонятно, зачем вам «strptime». –

ответ

1

Это потому, что strptime возвращает объект POSIXlt, что довольно сложно. Вам лучше использовать lapply, чтобы выбрать индексы, а затем использовать do.call, чтобы объединить их после. Вы также можете установить класс конечного объекта таким образом, например, используя as.Date.

x <- do.call(c,lapply(yhooL, function(i) as.Date(index(i)[1]))) 
summary(x) 
     Min.  1st Qu.  Median   Mean  3rd Qu.   Max. 
"2007-01-03" "2009-04-02" "2011-07-05" "2011-07-04" "2013-10-03" "2016-01-04" 
class(x) 
[1] "Date" 
+1

Их данные не ежедневно, поэтому вам нужно извлечь первый элемент, как они показывают в своем вопросе: 'do.call (c, lapply (yhooL, function (i) as.Date (index (i) [1]))) ' –

+0

@JoshuaUlrich Ах, вижу, спасибо. – James