Чтение определенных столбцов, начиная с определенных строк, из файла Excel с использованием пакета readxl в R - PullRequest
0 голосов
/ 21 июня 2019

Я пытаюсь прочитать файл Excel в R. Мне нужно прочитать столбец A и столбец C (без B), начиная со строки 5. Вот что я сделал:

library(readxl)

read_excel('./data/temp.xlsx',  skip=5,
            range=cell_cols(c('A', 'C')))

код выше не работает.Во-первых, он не пропускает 5 строк.Это читает из первого ряда.Во-вторых, это также читать столбец B, который я не хочу.

Кто-нибудь знает, что я сделал не так?Я знаю, как указать диапазон ячеек, но как выбрать нужные столбцы?

Ответы [ 2 ]

1 голос
/ 22 июня 2019

Вы можете использовать аргумент column_types (отметьте ?read_excel), чтобы пропустить чтение столбцов. Например, если столбцы A и C являются числовыми:

readxl::read_excel("/path/to/data.xlsx", 
    col_names = FALSE, 
    skip = 5, 
    col_types=c("numeric", "skip", "numeric"))

Примечание: если типы столбцов изначально неизвестны, вы можете прочитать их как текст и преобразовать их позже.

0 голосов
/ 12 июля 2019

Заимствование контента из readxl.tidyverse.org .Один из ваших вопросов относительно того, почему столбец B также добавляется, заключается в следующем:

## columns only
read_excel(..., range = cell_cols(1:26))
## is equivalent to all of these
read_excel(..., range = cell_cols(c(1, 26)))
read_excel(..., range = cell_cols("A:Z"))
read_excel(..., range = cell_cols(LETTERS))
read_excel(..., range = cell_cols(c("A", "Z"))

Следовательно, cell_cols("A:C") эквивалентно cell_cols(c("A", "C"))

Ранее то, что я делал, было в одном из моихПроекты были следующие.Я думаю, вы можете адаптировать следующее и извлечь данные по столбцам, а затем объединить их.

ranges = list("A5:H18", "A28:H39", "A50:H61")

extracted <- lapply(ranges, function(each_range){
                read_excel(filepath, sheet = 1, range = each_range, na = c("", "-"), col_names = cname, col_types = ctype)
        }) %>%
                reduce(full_join) 

Что касается вашего вопроса о пропуске строк, я также не уверен, потому что я также искал этот ответ,и нашел ваш вопрос по stackoverflow.

[править] Я думаю, что нашел некоторые показания по https://github.com/tidyverse/readxl/issues/577. В любом случае, если вы используете range, вы не сможете ничего сделатьskip, поскольку range имеет приоритет над skip и другими

...