2016-07-01 6 views
0

Я знаю, что это задавали несколько раз, но я не мог найти правильный способ обойти мою проблему. У меня есть очень простой CSV-файл, который я загрузить, глядя, как:преобразование фрейма данных (коэффициентов) в xts

27.07.2015,100 
28.07.2015,100.1504 
29.07.2015,100.1957 
30.07.2015,100.5044 
31.07.2015,100.7661 
03.08.2015,100.9308 
04.08.2015,100.8114 
05.08.2015,100.6927 
06.08.2015,100.7501 
07.08.2015,100.7194 
10.08.2015,100.8197 
11.08.2015,100.8133 

Теперь мне нужно преобразовать мой data.frame в XTS, так что я могу использовать пакет PerformanceAnalytics. Мой data.frame имеет структуру:

> str(mpey) 
'data.frame': 243 obs. of 2 variables: 
$ V1: Factor w/ 243 levels "01.01.2016","01.02.2016",..: 210 218 228 234 241 21 30 38 45 52 ... 
    - attr(*, "names")= chr "5" "6" "7" "8" ... 
$ V2: Factor w/ 242 levels "100","100.0062",..: 1 4 5 10 16 20 17 13 15 14 ... 
    - attr(*, "names")= chr "5" "6" "7" "8" ... 

Я пробовал разные вещи с as.xts функции, но может заставить его работать. Не могли бы вы помочь мне преодолеть это?

+0

V1 - это фактор, возможно, изменить его на характер или на класс даты? И V2 является фактором, возможно, вам может понадобиться изменить его на числовое. – zx8754

+0

уже пробовал, но не могу. он всегда дает мне *** as.Date.factor (mpey [, 1]) Ошибка в charToDate (x): символьная строка не находится в стандартном недвусмысленном формате или если я пытаюсь *** > as.Date (mpey [, 1]) Ошибка в charToDate (x): символьная строка не находится в стандартном однозначном формате – paolino

+0

Когда я добавляю формат = "% d /% m /% Y", я получаю строки 252 NA ... .. – paolino

ответ

0

Вот решение с использованием tidyquant пакета, который содержит as_xts() для принуждения кадров данных XTS объектов и as_tibble() для принуждать объекты временных рядов, такие как XTS до tibbles («аккуратного» данные кадров).

Воссоздать данные

> data_df 
# A tibble: 12 × 2 
     date value 
     <fctr> <fctr> 
1 27.07.2015  100 
2 28.07.2015 100.1504 
3 29.07.2015 100.1957 
4 30.07.2015 100.5044 
5 31.07.2015 100.7661 
6 03.08.2015 100.9308 
7 04.08.2015 100.8114 
8 05.08.2015 100.6927 
9 06.08.2015 100.7501 
10 07.08.2015 100.7194 
11 10.08.2015 100.8197 
12 11.08.2015 100.8133 

Во-первых, нам нужно переформатировать кадр данных. Даты и значения сохраняются как факторы, и они должны быть в дате и двойном классе, соответственно. Мы загрузим tidyquant и переформатируем фрейм данных. Обратите внимание, что tidyquant загружает tidyverse и финансовые пакеты, поэтому вам не нужно загружать что-либо еще. Дата может быть преобразована с lubridate::dmy, которая преобразует символы в формате дня месяца в год. Значение должно перейти от фактора к символу, а затем от символа к двойному, и это делается путем вложения as.numeric и as.character.

> library(tidyquant) 
> data_tib <- data_df %>% 
    mutate(date = dmy(date), 
      value = as.numeric(as.character(value))) 
> data_tib 
# A tibble: 12 × 2 
     date value 
     <date> <dbl> 
1 2015-07-27 100.0000 
2 2015-07-28 100.1504 
3 2015-07-29 100.1957 
4 2015-07-30 100.5044 
5 2015-07-31 100.7661 
6 2015-08-03 100.9308 
7 2015-08-04 100.8114 
8 2015-08-05 100.6927 
9 2015-08-06 100.7501 
10 2015-08-07 100.7194 
11 2015-08-10 100.8197 
12 2015-08-11 100.8133 

Теперь мы можем принуждать к xts с помощью функции tidyquant::as_xts(). Просто укажите date_col = date.

> data_xts <- data_tib %>% 
    as_xts(date_col = date) 
> data_xts 
       value 
2015-07-27 100.0000 
2015-07-28 100.1504 
2015-07-29 100.1957 
2015-07-30 100.5044 
2015-07-31 100.7661 
2015-08-03 100.9308 
2015-08-04 100.8114 
2015-08-05 100.6927 
2015-08-06 100.7501 
2015-08-07 100.7194 
2015-08-10 100.8197 
2015-08-11 100.8133