Как выбрать конкретный столбец и тип с readxl?

Я пытаюсь решить проблему импорта данных XLS в R с пакетом readxl. Конкретный файл xls имеет 18 столбцов и 472 строки, первые 7 строк содержат описательный текст, который необходимо пропустить. Я только хочу выбрать столбец 1,3,6:9 из 18 столбцов для EDA. Они имеют смешанные типы, включая дату, число и текст.

Кажется, что readxl не может импортировать неконтинуальные столбцы напрямую. Я планирую использовать skip =7, чтобы сначала прочитать весь лист, а затем выбрать следующий шаг. Однако проблема заключается в чтении угадать тип даты в числовой по умолчанию. Есть ли способ в readxl, чтобы указать col_types по имени столбца?

Воспроизводимый код с примером xlsx для обхода демострации.

    library(readxl)

    xlsx_example <- readxl_example("datasets.xlsx")

    # read the entire table
    read_excel(xlsx_example)

    # select specific column to name - following code does not work

    read_excel(xlsx_example, col_types=col (Sepal.Length = "numeric"))

2 ответа

Насколько я знаю, вы не можете указать col_types по имени столбца. Впрочем, можно читать только в определенных столбцах. Например,

read_excel(xlsx_example, col_types=c("numeric", "skip", "numeric", "numeric", "skip"))

импортирует столбцы 1, 3 и 4 и пропускает столбцы 2 и 5. Вы можете сделать это для 18 столбцов, но я думаю, что будет довольно сложно отследить, какой столбец импортируется и какого типа.

Альтернативой является чтение во всех столбцах как текста, используя col_types = "text" затем выберите и конвертируйте переменные по имени. Например:

library(tidyverse)
library(readxl)
xlsx_example <- readxl_example("datasets.xlsx")
df <- read_excel(xlsx_example, col_types = "text")
df %>% 
  select(Sepal.Length, Petal.Length) %>% 
  mutate(Sepal.Length = as.numeric(Sepal.Length))
#> # A tibble: 150 x 2
#>    Sepal.Length Petal.Length
#>           <dbl>        <chr>
#>  1          5.1          1.4
#>  2          4.9          1.4
#>  3          4.7          1.3
#>  4          4.6          1.5
#>  5          5.0          1.4
#>  6          5.4          1.7
#>  7          4.6          1.4
#>  8          5.0          1.5
#>  9          4.4          1.4
#> 10          4.9          1.5
#> # ... with 140 more rows

Поэтому я думаю, что вы можете сделать:

read_excel (xlsx_example, col_types = col (Sepal.Length = col_numeric ()))

Первый раз, когда я пишу, извините за ужасное форматирование, исправлю, когда у меня будет время.

Другие вопросы по тегам