处理 R 中的扫描错误 - 由数据中错位的 \n 分隔符引起
Dealing with scan error in R - Caused by misplaced \n separators in data
我正在使用 R 中的 read.table
阅读许多以制表符分隔的大型 .txt
文件。但是,有些行包含换行符 (\n
),其中应该有制表符 ( \t
),这会导致 Error in scan(...)
。我怎样才能有力地处理这个问题? (有没有办法在每次scan
遇到错误时替换\n
-->\t
?)
编辑:
这是一个简单的例子:
read.table(text='a1\tb1\tc1\td1\n
a2\tb2\tc2\td2', sep='\t')
工作正常,returns 一个数据框。但是,假设由于某种错误,换行符 \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
推到新行。
如果您确实遇到了您所描述的确切问题(没有丢失数据,只是分隔符错误)尝试:
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"
并按照您的意愿对其进行改造。
如果您缺少 data/complications 那么您必须:
strsplit(initial_lines,'\t',fixed=T)
给出:
[[1]]
[1] "a1" "b1" "c1"
[[2]]
[1] "d1"
[[3]]
[1] "a2" "b2" "c2" "d2"
并且您必须根据元素的数量对元素组合进行解析。
您还可以查看 readr
中的 ?count_fields
。
我正在使用 R 中的 read.table
阅读许多以制表符分隔的大型 .txt
文件。但是,有些行包含换行符 (\n
),其中应该有制表符 ( \t
),这会导致 Error in scan(...)
。我怎样才能有力地处理这个问题? (有没有办法在每次scan
遇到错误时替换\n
-->\t
?)
编辑:
这是一个简单的例子:
read.table(text='a1\tb1\tc1\td1\n
a2\tb2\tc2\td2', sep='\t')
工作正常,returns 一个数据框。但是,假设由于某种错误,换行符 \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
推到新行。
如果您确实遇到了您所描述的确切问题(没有丢失数据,只是分隔符错误)尝试:
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"
并按照您的意愿对其进行改造。
如果您缺少 data/complications 那么您必须:
strsplit(initial_lines,'\t',fixed=T)
给出:
[[1]]
[1] "a1" "b1" "c1"
[[2]]
[1] "d1"
[[3]]
[1] "a2" "b2" "c2" "d2"
并且您必须根据元素的数量对元素组合进行解析。
您还可以查看 readr
中的 ?count_fields
。