R 按列名读取 excel
R read excel by column names
所以我有一堆 excel 文件,我想遍历这些文件并将特定的、不连续的列读取到数据框中。使用 readxl
适用于这样的基本内容:
library(readxl)
library(plyr)
wb <- list.files(pattern = "*.xls")
dflist <- list()
for (i in wb){
dflist[[i]] <- data.frame(read_excel(i, sheet = "SheetName", skip=3, col_names = TRUE))
}
# now put them into a data frame
data <- ldply(dflist, data.frame, .id = NULL)
这(勉强)有效,但问题是我的 excel 文件有大约 114 列,而我只想要特定的列。此外,我不想让 R
猜测 col_types
因为它弄乱了其中的一些(例如,对于字符串列,如果第一个值以数字开头,它会尝试解释整个列作为数字,并崩溃)。所以我的问题是:如何指定特定的、不连续的列来读取? range
参数使用 cell_ranger
包,它不允许读取不连续的列。那么还有其他选择吗?
.xlsx >>> 你可以使用库 openxlsx
库 openxlsx
中的 read.xlsx
函数有一个可选参数 cols
,它采用数字索引,指定要读取的列。
如果至少一列包含字符,它似乎会将所有列读取为字符。
openxlsx::read.xlsx("test.xlsx", cols = c(2,3,6))
.xls >>> 你可以使用库 XLConnect
潜在的问题是库 XLConnect
需要库 rJava
,这在某些系统上安装可能很棘手。如果你能得到它运行,readWorksheet()
的keep
和drop
参数接受列名和索引。参数 colTypes
处理列类型。这样对我有用:
options(java.home = "C:\Program Files\Java\jdk1.8.0_74\") #path to jdk
library(rJava)
library(XLConnect)
workbook <- loadWorkbook("test.xls")
readWorksheet(workbook, sheet = "Sheet0", keep = c(1,2,5))
编辑:
库 readxl
如果您想从 excel 文件中读取一个范围(矩形),则对 .xls 和 .xlsx 都适用。例如
readxl::read_xls("test.xls", range = "B3:D8")
readxl::read_xls("test.xls", sheet = "Sheet1", range = cell_cols("B:E"))
readxl::read_xlsx("test.xlsx", sheet = 2, range = cell_cols(2:5))
所以我有一堆 excel 文件,我想遍历这些文件并将特定的、不连续的列读取到数据框中。使用 readxl
适用于这样的基本内容:
library(readxl)
library(plyr)
wb <- list.files(pattern = "*.xls")
dflist <- list()
for (i in wb){
dflist[[i]] <- data.frame(read_excel(i, sheet = "SheetName", skip=3, col_names = TRUE))
}
# now put them into a data frame
data <- ldply(dflist, data.frame, .id = NULL)
这(勉强)有效,但问题是我的 excel 文件有大约 114 列,而我只想要特定的列。此外,我不想让 R
猜测 col_types
因为它弄乱了其中的一些(例如,对于字符串列,如果第一个值以数字开头,它会尝试解释整个列作为数字,并崩溃)。所以我的问题是:如何指定特定的、不连续的列来读取? range
参数使用 cell_ranger
包,它不允许读取不连续的列。那么还有其他选择吗?
.xlsx >>> 你可以使用库 openxlsx
库 openxlsx
中的 read.xlsx
函数有一个可选参数 cols
,它采用数字索引,指定要读取的列。
如果至少一列包含字符,它似乎会将所有列读取为字符。
openxlsx::read.xlsx("test.xlsx", cols = c(2,3,6))
.xls >>> 你可以使用库 XLConnect
潜在的问题是库 XLConnect
需要库 rJava
,这在某些系统上安装可能很棘手。如果你能得到它运行,readWorksheet()
的keep
和drop
参数接受列名和索引。参数 colTypes
处理列类型。这样对我有用:
options(java.home = "C:\Program Files\Java\jdk1.8.0_74\") #path to jdk
library(rJava)
library(XLConnect)
workbook <- loadWorkbook("test.xls")
readWorksheet(workbook, sheet = "Sheet0", keep = c(1,2,5))
编辑:
库 readxl
如果您想从 excel 文件中读取一个范围(矩形),则对 .xls 和 .xlsx 都适用。例如
readxl::read_xls("test.xls", range = "B3:D8")
readxl::read_xls("test.xls", sheet = "Sheet1", range = cell_cols("B:E"))
readxl::read_xlsx("test.xlsx", sheet = 2, range = cell_cols(2:5))