所以我有一堆我想要循环的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
包,不允许读取不连续列。那么还有其他选择吗?
答案 0 :(得分:4)
openxlsx
read.xlsx
包中的openxlsx
函数有一个参数cols
,它带有一个数字索引,指定要读取的列。
如果至少有一列包含字符,它似乎会将所有列读为字符。
openxlsx::read.xlsx("test.xlsx", cols = c(2,3,6))
XLConnect
对于.xls文件,请参阅XLConnect
包。想到,在某些系统上安装rJava
可能会很棘手。 keep
的{{1}}和drop
参数同时接受列名和索引。参数readWorksheet()
处理列类型。这对我有用:
colTypes