reading a column of an excel file line by line
本问题已经有最佳答案,请猛点这里访问。
我有一个 excel 文件,我想逐行读取一列(即第三列的前 128 个值)并将其保存在列表中。我编写了这段代码来读取每一行并提取值,但它不能正常工作:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
con<-file(“D:\\\\MA\\\\excel_mix_meiningen.xls”,”r”)
datalist<-list() m<-list() # which column spalte<-3 #How many values? for(i in 1:128) { line<-readLines(con,n=1,warn=FALSE) } |
我看到这个错误:
1
|
Error in FUN(“????\\021????±”[[1L]], …) : subscript out of bounds
|
我知道,有一些包可以完成这项工作,但我想使用这个方法;)
- 但正如我所说,我不想使用包。我想使用这段代码:)
- 你不能。读取 Excel 文件的唯一方法是使用专门设计用于读取该文件格式的代码。
- 看看这个包 cran.r-project.org/web/packages/XLConnect/index.html
- 我已经尝试过了,但我遇到了另一个错误:stackoverflow.com/questions/19769954/…
- 您的 Excel 文件相当大。即使是中等大小的 .xlsx 文件,XLConnect 和 xlsx(或者更确切地说,Excel 的 Java 接口)的性能也极差。一般来说,如果文件甚至是你的大小的 1/10,我什至不会费心去尝试。我对旧的 Excel 格式 (.xls) 的运气更好。当然,您始终可以导出为 csv。
- @joran 是对的,Kaja。 Excel 使用特定的专有格式(我相信是 XML 的某个版本)。只要您的文件保持该格式,就只能使用专门设计用于处理它的代码来加载它。
- @joran 谢谢,它适用于 xls 文件。
如果你不想,你不必使用任何特殊的包,但你的代码是一种低效的策略。首先,将您感兴趣的工作表保存为制表符分隔的文本文件或 csv 文件等。然后,只需使用带有参数 nrows=128 的 ?read.table 或其变体之一。此时,您只需将要保留的列分配给列表。您可以使用 ?rm 删除加载的数据框。
- 我有一个很大的 excel 文件,而 read.table() 无法加载该文件
- @joran 哪个?我的代码或gung idee?
- @joran,你的权利。我错过了有关 Excel 文件的部分。我已经调整了我的答案。
- @Kaja Yours 永远不会(直接)工作。现在,gung 已经编辑澄清必须将 Excel 文件保存(导出)为完全不同的文件格式,他的方法(read.table 或 read.csv)将起作用。
- @Kaja,您的文件太大没有问题;你只需要使用 nrows=128 参数。 R 只会读取前 128 行,它应该不会有任何问题适合内存。
- @gung 我已将工作表保存为 CSV,但代码没有返回正确的值。我的工作表中没有的值
- 你能提供一个可重现的例子吗?
来源:https://www.codenong.com/19840123/