【问题标题】:reading a column of an excel file line by line [duplicate]逐行读取excel文件的列[重复]
【发布时间】:2013-11-07 15:40:51
【问题描述】:

我有一个 excel 文件,我想逐行读取一列(即第三列的前 128 个值)并将其保存在列表中。我编写了这段代码来读取每一行并提取值,但它不能正常工作:

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

我看到了这个错误:

Error in FUN("ÐÏ\021ࡱ"[[1L]], ...) : subscript out of bounds

我知道,有一些包可以完成这项工作,但我想使用这个方法;)

【问题讨论】:

  • 但正如我所说,我不想使用包。我想使用这段代码:)
  • 你不能。读取 Excel 文件的唯一方法是使用专门设计用于读取该文件格式的代码。
  • 我已经尝试过了,但我得到了另一个错误:stackoverflow.com/questions/19769954/…
  • 您的 Excel 文件相当大。即使是中等大小的 .xlsx 文件,XLConnect 和 xlsx(或者更确切地说,Excel 的 Java 接口)的性能也极差。一般来说,如果文件甚至是你的大小的 1/10,我什至不会费心去尝试。我对旧的 Excel 格式 (.xls) 的运气更好。当然,您可以随时导出为 csv。

标签: r


【解决方案1】:

如果您不想使用任何特殊的包,则不必使用,但您的代码是一种低效的策略。首先,将您感兴趣的工作表保存为制表符分隔的文本文件或 csv 文件等。然后,只需使用 ?read.table 或其变体之一,并带有参数 nrows=128。此时,您只需将要保留的列分配给列表。您可以使用?rm 删除加载的数据框。

【讨论】:

  • 我有一个很大的excel文件,read.table()无法加载文件
  • @joran 哪一个?我的代码还是想法?
  • @joran,你的权利。我错过了有关 Excel 文件的部分。我已经修改了我的答案。
  • @Kaja Yours 永远不会(直接)工作。现在,gung 已经编辑澄清必须将 Excel 文件保存(导出)为完全不同的文件格式,他的方法(read.table 或 read.csv)将起作用。
  • @Kaja,你的文件太大没问题;你只需要使用nrows=128 参数。 R 只会读取前 128 行,它应该不会有任何问题适合内存。
猜你喜欢
  • 2015-05-19
  • 2020-02-21
  • 2017-08-29
  • 1970-01-01
  • 2012-09-05
  • 1970-01-01
  • 2018-01-26
  • 1970-01-01
  • 2018-02-03
相关资源
最近更新 更多