read_excel'期待数字'.....和值是数字

时间:2015-10-26 19:01:14

标签: r excel

我没有找到这个问题的答案,所以希望这是获得一些帮助的地方。

我正在阅读.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定义?

谢谢,

1 个答案:

答案 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)
}

可能有更好的解决方案。但我认为这应该有效。