• R语言
  • 用RODBC读xls文件时数值怎么变成了NA

xls文件太多,不合适一个个去转换格式,用RODBC包去读取数据,写了个函数read.xls

<br />
require(RODBC)</p>
<p>read.xls <- function(file.path, sheet.name,col.names, na.strings){</p>
<p>    channel = odbcConnectExcel(file.path)<br />
    xls = sqlFetch(channel, sheet.name, stringsAsFactors = FALSE,na.strings = na.strings)<br />
    odbcClose(channel)<br />
    colnames(xls) <- col.names<br />
    xls<br />
}</p>
<p>xlsData <- read.xls("165806.xls", "Sheet1", col.names = c("date", "zf","zd","qs","open","high","low","close","meanPrice","cjl","cje","hsl","ltsz","zsz"),na.strings='-')</p>
<p>
</p>

为什么和'-' 在同一列的其他单元格也变成NA了

数据文件165806.xls的地址 http://dl.vmall.com/c0vwa0oxw2

读数据的时候还有这样的警告

<br />
警告信息:<br />
1: In strptime(xx, f <- "%Y-%m-%d %H:%M:%OS", tz = tz) :<br />
  unable to identify current timezone '':<br />
please set environment variable 'TZ'<br />
2: In strptime(xx, f <- "%Y-%m-%d %H:%M:%OS", tz = tz) :<br />
  unknown timezone 'localtime'<br />
</p>

回复 第1楼 的 ypchen:估计是在自动决定变量类型(字符或数值)时取前若干行的值来定义的问题,尝试了一下把前n行(n>=4)的“-”全改为0,则能正常导入,如果改为字符如“a,b,c,d,...”,则所有单元格都变成NA,怪了个哉。也没查到里面有什么参数设定可以控制。

PS:我这里运行没有出现你那样的警告。

回复 第2楼 的 iamstomach:我要读取的EXCEL文件非常多,不可能一个个打开去修改

RODBC 可能并不是读 xls 最好的选择,据说有 255 列的限制云云,鹅也没用过所以不是很清楚里边怎么回事。

可以试试以下几个:

XLConnect / xlsx (基于 Apache POI,Java)

gdata (基于 Spreadsheet::ParseExcel,Perl)

xlsReadWrite (一个二进制库的封装)

警告可能是由于不规范的安装卸载导致的问题。最好拿到一个干净的环境下运行。