【发布时间】:2015-05-05 10:50:05
【问题描述】:
我正在努力使用read.csv 在 R 中读取一个大型 (22MB) 数据文件。我知道有很多类似的问题,但我发现的问题似乎都没有帮助我解决我的问题(one,two,three,
我的文件有 6 列,除了 1 列之外都是整数和 330,001 行。
我可以用excel打开文件。不再有空单元格,除了第一列(id)之外的每一列都有NA 值。
当我使用以下代码时:
mt <- read.csv("C:/path/master.csv", header=T, sep=",", encoding="utf-8")
我得到 79,024 行 将其更改为以下内容(请参阅here)
mt <- read.csv("C:/Users/slebex/Desktop/PhB Data/master.csv", header=T, sep=",", quote="", encoding="utf-8")
将行数增加到 104,510,但读取所有整数作为因子(或添加 stringsAsFactors = F 时的字符)。
此外,使用以下代码会给出以下警告消息并仅加载包含 26,234 个元素的大字符
mt <- readLines(file("C:/Users/slebex/Desktop/PhB Data/master.csv", encoding="utf-8"))
Warning messages:
1: invalid input found on input connection 'C:/path/master.csv'
2: In readLines(file("C:/path/master.csv", :
incomplete final line found on 'C:/path/master.csv'
数据表如下所示
head(mt)
id App_date Grant_date Prior_date Num_inventors Assignee
1 1 NA 18370630 NA 1 <NA>
2 2 NA 18371028 NA 1 <NA>
3 3 NA 18371028 NA 1 <NA>
4 4 NA 18380109 NA 1 <NA>
5 5 NA 18380203 NA 1 <NA>
6 6 NA 18380210 NA 1 <NA>
tail(mt)
id App_date Grant_date Prior_date Num_inventors
79019 79019 19990826 20010206 19990826 2
79020 79020 19990127 20010206 19920501 2
79021 79021 19980213 20010206 19951002 4
79022 79022 19941108 20010206 19931108 4
79023 79023 19941208 20010206 19901025 1
79024 79024 19980918 20010206 19931214 1
Assignee
79019 Novo Nordisk Biotech, Inc.
79020 Trustees Of The University Of Pennsylvania
79021 Mohammad W. Katoot, Katoot, Administrator Karen Robbyn Goodan, Katoot, Administrator Ali Maroof, Katoot, Administrator Ahmed Maroof
79022 Mcgill University
79023 The Trustees Of Columbia University In The City Of New York
79024 Centr Embrionalnikh Tkaney
如您所见,Assignee 变量包含各种形式的标点符号。也许这会导致我不确定的问题(请参阅comments here)。我删除了所有双空格,将所有逗号更改为分号,并删除了所有引号,但这并没有帮助。
在this question 之后,我做了以下操作
library(readr)
mt <- read_csv("C:/Users/slebex/Desktop/PhB Data/master.csv")
这给了我以下错误
Warning message:
660101 problems parsing 'C:/Users/slebex/Desktop/PhB Data/master.csv'. See problems(...) for more details.
尽管出现错误,数据集已完全加载,但我的两列突然完全由 NA 值组成。
如果相关请在 sessionInfo() 下方找到
R version 3.2.0 (2015-04-16)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1
locale:
[1] LC_COLLATE=English_Singapore.1252 LC_CTYPE=English_Singapore.1252
[3] LC_MONETARY=English_Singapore.1252 LC_NUMERIC=C
[5] LC_TIME=English_Singapore.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] tools_3.2.0
欢迎提出建议
【问题讨论】:
-
您是否尝试使用不带编码参数的 read.csv?并尝试包含 strip.white=T 参数。
-
我在没有编码的情况下使用了各种无效的编码变体(
= Unicode和=utf-8)。我从来没有包含strip.white=T,因为我没有空单元格,但它当然可以工作。 -
也可以试试 read.table from data.tabe
-
在
data.table包中尝试fread() -
哦!有趣的问题,将这个案例作为一个问题提出给读者可能会有所帮助,因为我怀疑它以前出现过。 github.com/hadley/readr/issues