2017-10-29 65 views
1

我对发生的事情无能为力。我正在尝试读取R中的utf-8 txt文件。值由标签分隔。以下是从文件的摘录:R不警告并只读取txt文件中的一些数据

LOCATION  FORM TAG FEATURES 
1 (1:1:1:1)   bi P PREFIX|bi+ 
2 (1:1:1:2)  somi N STEM|POS:N|LEM:{som|ROOT:smw|M|GEN 
3 (1:1:2:1) {ll~ahi PN STEM|POS:PN|LEM:{ll~ah|ROOT:Alh|GEN 
4 (1:1:3:1)   {l DET PREFIX|Al+ 
5 (1:1:3:2) r~aHoma`ni ADJ STEM|POS:ADJ|LEM:r~aHoma`n|ROOT:rHm|MS|GEN 
6 (1:1:4:1)   {l DET PREFIX|Al+ 

该文件可以从Quranic Arabic Corpus Downloads

这里是我试图读取文件的方式之一下载:

test <- read.csv(file = "quranic-corpus-morphology-0.4.txt", 
       sep = "\t", header = TRUE, skip = 56, 
       stringsAsFactors = FALSE) 

的问题是多少正在阅读的记录。我可以很容易地看到记录数量的差异。 read.csv返回77109条记录,没有任何警告。而在LibreOffice Calc中打开相同的文件,我可以看到128219条记录。

读取文件通过read.table

test <- read.table(file = "quranic-corpus-morphology-0.4.txt", 
       sep = "\t", header = TRUE, 
       skip = 56, stringsAsFactors = FALSE) 

回报

错误扫描(文件=文件,内容=什么,月=月,报价=报价,DEC =月,: 线78没有4个元素

我无法弄清楚什么是错用线78

弄干净CSV我甚至都试过了,另存为LibreOffice的计算器,它会返回该警告CSV

本文档可能包含不能被保存在当前选定的文件格式的格式或内容“文本CSV” 。

线135-140:

(2:7:4:1) quluwbi N  STEM|POS:N|LEM:qalob|ROOT:qlb|FP|GEN 
(2:7:4:2) himo PRON SUFFIX|PRON:3MP 
(2:7:5:1) wa  CONJ PREFIX|w:CONJ+ 
(2:7:5:2) EalaY` P  STEM|POS:P|LEM:EalaY` 
(2:7:6:1) samoEi N  STEM|POS:N|LEM:samoE|ROOT:smE|M|GEN 
(2:7:6:2) himo PRON SUFFIX|PRON:3MP 
+0

您可以在您的问题在线78?这个错误似乎是说R没有找到4列,即它找到了少于或多于4列。 –

+0

我跳过第56行有版权文本,所以78会是相对的,我应该包括哪一行数? –

+0

如果可能,请包括135-140。但首先检查以确保这些线路的数据更有意义。 –

回答

2

你需要让R来治疗你的数据报价为其他任何字符,否则它要去把它的其余部分作为一个字符串,直至最终报价,

62行(跳过56行后)似乎有'在第4列STEM|POS:V|IMPF|(IV)|LEM:'aAmana|ROOT:Amn|3MP

尝试:

test <- read.csv(file = "quranic-corpus-morphology-0.4.txt", 
       sep = "\t", header = TRUE, skip = 56, 
       stringsAsFactors = FALSE, quote="") 

输出:

> str(test) 
'data.frame': 128219 obs. of 4 variables: 
$ LOCATION: chr "(1:1:1:1)" "(1:1:1:2)" "(1:1:2:1)" "(1:1:3:1)" ... 
$ FORM : chr "bi" "somi" "{ll~ahi" "{l" ... 
$ TAG  : chr "P" "N" "PN" "DET" ... 
$ FEATURES: chr "PREFIX|bi+" "STEM|POS:N|LEM:{som|ROOT:smw|M|GEN" "STEM|POS:PN|LEM:{ll~ah|ROOT:Alh|GEN" "PREFIX|Al+" ... 
+0

我无法将此添加为上述注释,因为我没有足够的声望。所以添加它作为一个答案,而不是。 –