【发布时间】:2017-01-09 02:54:02
【问题描述】:
我正在尝试读取一个大型 csv 数据文件(由 , 分隔),但我一直卡在如下行中: 原始文件链接:“http://daniels-pull.universityofdenv.netdna-cdn.com/assets/GeneralOccurrencesAll.csv”
| RIN | UCR_Group | Loc |
|--------|-----------|---------------------------------------------|
|490658 | Property | 400 BLOCK 17TH ST, 5TH FL |
|506928 | Disorder | 1400 BLOCK W COLORADO AVE, COLORADO SPRINGS |
如您所见,列中也使用了文件的分隔符。有没有办法将列的分隔符指定为要在文件中读取的正则表达式,还是我需要研究使用 read.fwf 来查找每个字段的最大长度,并使用它解析数据? 目前,这是我到目前为止提出的代码:
datafile <- "http://daniels-pull.universityofdenv.netdna-cdn.com/assets/GeneralOccurrencesAll.csv"
new <-readr::read_delim(datafile, sep ='[\\S],[\\S]')
new <-read.table(datafile, sep ='[\\S],[\\S]' )
我应该使用 read.fwf,还是尝试手动提取问题列?任何帮助将不胜感激。
编辑:
对于奖励积分,我真的很想构建一个函数来检测 csv 文件中的坏列,或者看起来可能会破坏文件结构的数据,例如这种情况。这样,我就不必乱用文本编辑器,并且可以以编程方式在文件中找到这些错误。关于如何构建这样的东西的想法?
【问题讨论】:
-
是的 readr::read_csv 有效,但有错误。我希望我可以提供一个正则表达式作为 R 中的分隔符,但我想不是。我只是想知道是否有更优雅的方式,例如 read.table 或使用 fread 逐列拉入数据可能更容易。
-
如果它甚至可以在 pandas 中进行,那将是非常棒的,但我更喜欢 r.根据这个网站,我知道我的数据结构不好:csvlint.io/validation/5872bb3e3738390004000005
-
@petergensler 我认为@darshan-baral 表示来自base R 的原始
read.csv -
不,我认为 read.csv 不起作用...我收到此错误:read.csv(datafile, header = TRUE, sep = '[\\S],[\\S] ') 扫描错误(文件,what = "",sep = sep,quote = quote,nlines = 1,quiet = TRUE,:无效的 'sep' 值:必须是一个字节
-
@petergensler -
readLines("filename")几乎是最小的 :-)