我的问题是回答我在阅读包含广告系列财务数据的.tsv文件时遇到的两个问题。
首先,file有一个空字符,它终止输入并在使用data.table :: fread()时抛出错误'嵌入nul in string:'NAVARRO b \ 0 \ 023 POWERS'。我知道这个问题有很多潜在的解决方案,但我希望在R中找到一些东西。看过read.table()中的skipNul选项后,我决定试一试。
这让我想到了第二个问题:带有合理设置的read.table()(comment.char =“”,quote =“”,fill = T)不会抛出错误,但它也不< / em>检测data.table :: fread()标识的相同文件大小(带有read.table()的~100k行与带有data.table :: fread()的~8M行。 fread()答案似乎更正确,因为文件大小为~1.5GB,data.table :: fread()在读取导致错误出现的行时识别有效数据。
Here是指向问题的代码和输出的链接。
为什么read.table()会返回如此不同的结果? fread()通过猜测输入文件的特征进行操作,但它似乎没有猜测我在read.table()中没有使用的任何外来选项。
感谢您的帮助!
注意 除了源和它包含的信息之外,我对该文件一无所知。顺便提一下,来自加利福尼亚州的国务卿。无论如何,文件太大而无法在excel或记事本中打开,所以除了查看R中的少数行之外,我还无法直观地检查文件。
答案 0 :(得分:0)
我无法找出处理问题的R方法,但我能够使用依赖于pandas的python脚本:
import pandas as pd
import os
os.chdir(path = "C:/Users/taylor/Dropbox/WildPolicy/Data/Campaign finance/CalAccess/DATA")
receipts_chunked = pd.read_table("RCPT_CD.TSV", sep = "\t", error_bad_lines = False, low_memory = False, chunksize = 5e5)
chunk_num = 0
for chunk in receipts_chunked:
chunk_num = chunk_num + 1
file_name = "receipts_chunked_" + str(chunk_num) + ".csv"
print("Output file:", file_name)
chunk.to_csv(file_name, sep = ",", index = False)
此路由的问题在于,使用'error_bad_lines = False'时,只会跳过问题行而不是错误输出。只有少数错误情况(大约800万行),但这显然不是最理想的。