Как импортировать почасовые данные и преобразовать их в работоспособный объект xts

#r #time-series #xts

#r #временные ряды #xts

Вопрос:

Вероятно, это очень простое решение, но я совсем новичок в R и недавно закончил несколько курсов elementry Datacamp. Я пытаюсь импортировать почасовые данные из csv-файла и преобразовать их в объект xts.

Сначала я попытался напрямую прочитать is как объект зоопарка, но это не сработало. Затем я нашел способ сначала извлечь столбец дата время, содержащий as.POSIXct, и использовать его для упорядочения фрейма данных по. Но это приводит к следующей ошибке.

Код, который я пробовал:

 gt; btch lt;- read.csv(file = "btch.csv", header = T, sep = ";") gt; head(btch)  date symbol open high low close Volume.BTC Volume.USD 1 22-11-2021 00:00 BTC/USD 58671 58793 58025 58255 4.106.503.846.330.780 239.224.381.568 2 21-11-2021 23:00 BTC/USD 59163 59322 58575 58671 494.530.646.266.469 290.146.075.471 3 21-11-2021 22:00 BTC/USD 59540 59571 58971 59163 22.018.707.614.894.400 130.269.279.862 4 21-11-2021 21:00 BTC/USD 59647 59703 59432 59540 16.367.382.035.438.300 97.451.392.639 5 21-11-2021 20:00 BTC/USD 59373 59734 59319 59647 25.563.673.617.449.300 152.479.644.026 6 21-11-2021 19:00 BTC/USD 59488 59611 59265 59373 17.191.861.324.170.900 10.207.323.824  gt; pt lt;- as.POSIXct(btch$date, format = "%d-%m-%Y %H:%M") gt; btch_ts lt;- xts(btch[,-1], order.by = pt)  

Ошибка в xts(btch[, -1], order.by = pt) : ‘order.by» не может содержать «NA», «NaN» или «Inf»

Первые 10 строк моего CSV-файла:

 date symbol open high low close Volume.BTC Volume.USD 1 22-11-2021 00:00 BTC/USD 58671 58793 58025 58255 4.106.503.846.330.780 239.224.381.568 2 21-11-2021 23:00 BTC/USD 59163 59322 58575 58671 494.530.646.266.469 290.146.075.471 3 21-11-2021 22:00 BTC/USD 59540 59571 58971 59163 22.018.707.614.894.400 130.269.279.862 4 21-11-2021 21:00 BTC/USD 59647 59703 59432 59540 16.367.382.035.438.300 97.451.392.639 5 21-11-2021 20:00 BTC/USD 59373 59734 59319 59647 25.563.673.617.449.300 152.479.644.026 6 21-11-2021 19:00 BTC/USD 59488 59611 59265 59373 17.191.861.324.170.900 10.207.323.824 7 21-11-2021 18:00 BTC/USD 59516 59591 59324 59488 20.877.146.473.238.200 12.419.396.894 8 21-11-2021 17:00 BTC/USD 59908 60067 59469 59516 4.256.875.185.395.520 253.352.183.534 9 21-11-2021 16:00 BTC/USD 59258 60000 59183 59912 4.848.661.867.906.260 29.049.302.983 10 21-11-2021 15:00 BTC/USD 58948 59315 58852 59258 24.230.832.403.726.000 143.587.066.658  

Итак, обновите гораздо меньший csv-файл, который содержит только 5 строк, чтобы попытаться воспроизвести его оттуда.

 gt; btchs lt;- read.csv(file = "btch_small.csv", header = T, sep = ";") gt; head(btchs, n = 8)  date symbol open high low close Volume.BTC Volume.USD 1 22-11-2021 00:00 BTC/USD 58671 58793 58025 58255 4.106.503.846.330.780 239.224.381.568 2 21-11-2021 23:00 BTC/USD 59163 59322 58575 58671 494.530.646.266.469 290.146.075.471 3 21-11-2021 22:00 BTC/USD 59540 59571 58971 59163 22.018.707.614.894.400 130.269.279.862 4 21-11-2021 21:00 BTC/USD 59647 59703 59432 59540 16.367.382.035.438.300 97.451.392.639 gt; index lt;- as.POSIXct(btchs$date, format = "%d-%m-%Y %H:%M") gt; btchs_ts lt;- xts(btchs[,-1], order.by = index) gt; head(btchs_ts)  symbol open high low close Volume.BTC Volume.USD  2021-11-21 21:00:00 "BTC/USD" "59647" "59703" "59432" "59540" "16.367.382.035.438.300" "97.451.392.639"  2021-11-21 22:00:00 "BTC/USD" "59540" "59571" "58971" "59163" "22.018.707.614.894.400" "130.269.279.862" 2021-11-21 23:00:00 "BTC/USD" "59163" "59322" "58575" "58671" "494.530.646.266.469" "290.146.075.471" 2021-11-22 00:00:00 "BTC/USD" "58671" "58793" "58025" "58255" "4.106.503.846.330.780" "239.224.381.568"  

Теперь все мои другие значения изменились на символы. Не понимаю, почему это произошло.

Комментарии:

1. CSV-это загрузка из FTX.

2. Сообщение об ошибке довольно четкое. У вас есть NAs, NaNs или Infs pt . Если вам не интересно знать, почему существуют эти NAs, вы можете попробовать что-то подобное btch_ts lt;- xts(btch[!is.na(pt),-1], order.by = pt[!is.na(pt)]) .

3. @djas, спасибо, но тогда количество строк не совпадает. btch_ts lt;- xts(btch[!is.na(pt),-1], order.by = pt[!is.na(pt)]) Ошибка в xts(btch[!is.na(pt), -1], order.by = pt[!is.na(pt)]) : NROW(x) должен соответствовать длине(order.by) `

4. Это может быть трудно понять без воспроизводимого примера. Но идея заключается в том, чтобы удалить NAs, NaNs и Infs из pt соответствующих строк и в соответствующие строки btch , прежде чем передавать их xts() . Если вы не ожидали, что в этой колонке будет NAs amp; co, было бы неплохо сначала понять, что происходит, вместо того, чтобы слепо удалять эти проблемные значения.

5. Входные данные, показанные в конце вопроса, не соответствуют команде read.csv. В нем нет точек с запятой.