我没有找到这个问题的答案,所以希望这是获得一些帮助的地方。
我正在阅读.zip文件中包含的许多Excel文件。我拥有的每个.zip都有大约40个我想读的excel文件。我正在尝试创建数据框列表,但在根据文件内容读取某些文件时遇到错误。
这是for循环中的读取语句:
library(readxl)
df[[i]] <- read_excel(xls_lst[i],
skip = 4,
col_names = FALSE,
na = "n/a",
col_types = data_types)
data_types具有以下值:
> data_types
[1] "text" "numeric" "numeric" "numeric" "numeric" "numeric" "numeric"
这个文件是正确的。
read_excel语句在某些文件上运行良好,但在其他文件上返回警告消息:
In read_xlsx_(path, sheet, col_names = col_names, col_types = col_types,... :
[54, 7]: expecting numeric: got '9999.990000'
嗯,价值'9999.99000'对我来说就像一个数字。 当我打开创建此警告的Excel文件时,该文件确实显示了这些值,并且还显示该列在Excel中被格式化为文本。 当我将列格式更改为数字时,重新保存Excel工作表,然后正确读取数据。
但是,我有几百个这样的文件要阅读...... read_excel
如何忽略Excel指示的列格式,而是使用我在调用语句中提供的col_type
定义?
谢谢,
答案 0 :(得分:1)
我试图建立一个玩具示例。
我的xlsx文件包含:
3 1
3 3
4 4
5 5
7 '999
6 3
按照你的方式阅读:
data_types<-c("numeric","numeric")
a<-read_excel("aa.xlsx",
col_names = FALSE,
na = "n/a",
col_types = data_types
)
Warning message:
In read_xlsx_(path, sheet, col_names = col_names, col_types = col_types, :
[5, 2]: expecting numeric: got '999'
以text
data_types<-c("text","text")
dat<-read_excel("aa.xlsx",
col_names = FALSE,
na = "n/a",
col_types = data_types
)
使用type.convert
:
dat[]<-lapply(dat, type.convert)
至少适用于这个简单的例子。
*编辑:
代码中有错误。
*编辑以回应评论:
另一个玩具示例,说明如何将type.convert
应用于您的数据:
#list of data frames
l<-list()
l[[1]]<-data.frame(matrix(rep(as.character(1:5),2), ncol = 2), stringsAsFactors = FALSE)
l<-rep(l,3)
#looping over your list to encode columns correctly:
for (i in 1: length(l)){
l[[i]][]<-lapply(l[[i]], type.convert)
}
可能有更好的解决方案。但我认为这应该有效。