使用 R 中的 readxl 包从 excel 文件中的某些行开始读取特定列



我正在尝试将 excel 文件读入 R。 我需要从第 5 行开始读取 A 列和 C 列(没有 B(。 这是我所做的:

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

上面的代码不起作用。首先,它不会跳过 5 行。它从第一行读取。其次,它还读了B栏,这是我不想要的。

有谁知道我做错了什么?我知道如何指定单元格范围,但是我应该如何选择我需要的特定列?

您可以使用 column_types 参数(检查?read_excel(跳过读取列。例如,如果列 A 和 C 是数字:

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

注意:如果列类型最初未知,您可以将它们作为文本读取,然后进行转换。

借用 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和其他人。

最新更新