Как выбрать конкретный столбец и тип с 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 ()))
Первый раз, когда я пишу, извините за ужасное форматирование, исправлю, когда у меня будет время.