我正在处理从许多压缩文件夹导入一系列文本文件。
之前,我使用WinRAR解压缩文件,然后将read.table应用为:
main <- read.table(file.path(dir, paste0("Current/17/Folder/Main.txt")),
sep = '|',
header = FALSE,
stringsAsFactors = FALSE,
skipNul = TRUE,
comment.char="",
quote = ""
)
哪个有效,但需要解压缩自己(占用了大量的空间)。我偶然发现了unz,这可以让我避免这一步骤如下:
main <- read.table(unz(file.path(dir, paste0("Current/17.zip")), "Folder/Main.txt"),
sep = '|',
header = FALSE,
stringsAsFactors = FALSE,
skipNul = TRUE,
comment.char="",
quote = ""
)
后者适用于大多数情况,但对于某些文件,read.table会抛出错误
number of items read is not a multiple of the number of columns
我发现这是来自文件中的一些奇怪字符。在一种情况下比较两种方法,我发现手动解压缩和读取方法将这些特殊字符转换为“??” (带有白色背景,暗示一个外来字符)(这是可取的,如果它不能读取它们),而第二种方法只是在它击中它们时抛出一个错误(??没有在输出中报告),而不是读取当前行或文件的其余部分。我在Bash中查看了有问题的行:
sed -n '10905951 p' Main.txt
它也报告了相同的“??”显示在R。
中的read.table中我尝试过使用带有几种不同文件格式的fileEncoding无济于事。我曾经看到过处理像这样的奇怪字符的许多其他方法需要手动替换字符,但我很难找到字符是什么,以及为什么WinRAR的解压缩将它们转换为可读的东西,而unz则不然。我也考虑过其他读取选项,但read.table比我更好,因为它允许使用skipNul选项,这与我的数据相关。
任何帮助或想法都将不胜感激。