关于r:逐行读取excel文件的一列 | 珊瑚贝

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)
  datalist<-c(datalist,sapply(line,”[[“,spalte))

}
close(con)
datalist

我看到这个错误:

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/

微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?