R read_excel неправильно считывает данные numeri c - PullRequest
0 голосов
/ 14 июля 2020

Я пытаюсь загрузить и проанализировать лист данных в файле ie_data.xls с домашней страницы профессора Роберта Шиллера (http://www.econ.yale.edu/~shiller/data.htm). Я загружаю файл из http://www.econ.yale.edu/~shiller/data/ie_data.xls, а затем запускаю следующий скрипт:

library(tidyverse)
ie_data <- read_excel("ie_data.xls", sheet = "Data", col_names = TRUE, 
                       col_types = "numeric", na = "", skip = 7) %>% 
           select(Date,E) %>%
           drop_na()

Создается куча предупреждений, но более неприятный результат

> names(ie_data)
[1] "Date" "E"   
> ie_data
# A tibble: 1,791 x 2
    Date     E
   <dbl> <dbl>
 1 1871.   0.4
 2 1871.   0.4
 3 1871.   0.4
 4 1871.   0.4
 5 1871.   0.4
 6 1871.   0.4
 7 1871.   0.4
 8 1871.   0.4
 9 1871.   0.4
10 1871.   0.4
# ... with 1,781 more rows
Warning message:
`...` is not empty.

We detected these problematic arguments:
* `needs_dots`

These dots only exist to allow future extensions and should be empty.
Did you misspecify an argument? 

Содержимое обоих столбцов должно иметь два десятичных знака (1871.01 представляет январь 1871 года, 1871.02 представляет февраль 1871 года и так далее, а второй столбец представляет собой прибыль на акцию, округленную до ближайшего пенни), но все, что находится после десятичной точки, пропало в первом столбце в заголовке фрейма данных! Еще загадочнее его хвост:

> tail(ie_data)
# A tibble: 6 x 2
   Date     E
  <dbl> <dbl>
1 2019.  135.
2 2019.  137.
3 2019.  139.
4 2020.  132.
5 2020.  124.
6 2020.  116.
Warning message:
`...` is not empty.

We detected these problematic arguments:
* `needs_dots`

These dots only exist to allow future extensions and should be empty.
Did you misspecify an argument?  

Теперь оба столбца потеряли дробную часть! Какие изменения мне нужно внести в свой код, чтобы эти столбцы читались правильно?

С уважением и заранее большое спасибо

Thomas Philips

Ответы [ 2 ]

1 голос
/ 14 июля 2020

попробуйте с col_types = "text" Не знаю, почему numeri c вы получите обрезанные числа, но мне кажется, он работает с текстом (при условии, что вы позже конвертируете в округленное число)

1 голос
/ 14 июля 2020

Вы можете сделать следующее, чтобы увидеть в консоли более значащие цифры при печати данных с помощью ie_data. Это не влияет на ваши данные, а только на то, как они отображаются при печати на вашей консоли.

options(pillar.sigfig = 10)
ie_data

Что будет отображать:

  Date     E
     <dbl> <dbl>
 1 1871.01   0.4
 2 1871.02   0.4
 3 1871.03   0.4
 4 1871.04   0.4
 5 1871.05   0.4
 6 1871.06   0.4
 7 1871.07   0.4
 8 1871.08   0.4
 9 1871.09   0.4
10 1871.1    0.4
# ... with 1,781 more rows

Если вы используете следующее:

options(pillar.sigfig = 1)
ie_data

Вы получите:

# A tibble: 1,791 x 2
    Date     E
   <dbl> <dbl>
 1 1871.   0.4
 2 1871.   0.4
 3 1871.   0.4
 4 1871.   0.4
 5 1871.   0.4
 6 1871.   0.4
 7 1871.   0.4
 8 1871.   0.4
 9 1871.   0.4
10 1871.   0.4
# ... with 1,781 more rows
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...