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,但代码没有返回正确的值。我的工作表中没有的值
-
你能提供一个可重现的例子吗?