处理R中的扫描错误 - 由数据中错误的\ n分隔符引起

时间:2015-04-26 06:38:25

标签: r read.table

我在R中使用.txt读取许多以制表符分隔的大read.table个文件。但是,有些行包含换行符(\n),其中应该有标签( \t),导致Error in scan(...)。我如何能够有力地处理这个问题? (每当\n遇到错误时,有没有办法替换\t - > scan?)

编辑:

这是一个简单的例子:

read.table(text='a1\tb1\tc1\td1\n
                 a2\tb2\tc2\td2', sep='\t')

工作正常,并返回一个数据框。但是,假设有一个错误的换行符\n应该有一个标签\t(例如,在c1之后):

read.table(text='a1\tb1\tc1\nd1\n
                 a2\tb2\tc2\td2', sep='\t')

这会引发错误:

Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  : 
    line 1 did not have 4 elements

注意:使用fill=T不会有帮助,因为它会将d1推送到新行。

1 个答案:

答案 0 :(得分:1)

如果您确实遇到了您描述的确切问题(没有丢失数据,只是错误的分隔符),请尝试:

library(readr)
initial_lines <- read_lines('a1\tb1\tc1\nd1\na2\tb2\tc2\td2')

seperated_together <- unlist(strsplit(initial_lines, "\t", fixed = T))

matrix(seperated_together, ncol = 4)

给出:

     [,1] [,2] [,3] [,4]
[1,] "a1" "c1" "a2" "c2"
[2,] "b1" "d1" "b2" "d2"

并按照您的意愿进行转换。

如果您缺少数据/并发症,那么您必须:

strsplit(initial_lines,'\t',fixed=T)

给出:

[[1]]
[1] "a1" "b1" "c1"

[[2]]
[1] "d1"

[[3]]
[1] "a2" "b2" "c2" "d2"  

并且您必须根据元素数量解析元素组合。

您还可以查看?count_fields中的readr