读取带有异常字符的制表符分隔文件,然后编写精确副本

时间:2011-11-23 12:42:59

标签: r

问题

我有一个制表符分隔的输入文件,如下所示:

Variable [1]    Variable [2]
111    Something
Nothing    222

第一行表示列名,下两行表示列值。如您所见,列名包括空格和一些棘手的符号。

现在,我想要做的是将此文件导入R,然后再将其输出到新的文本文件,使其看起来与输入完全相同。为此,我创建了以下脚本(假设输入文件名为“Test.txt”):

file <- "Test.txt"
x <- read.table(file, header = TRUE, sep = "\t")
write.table(x, file = "TestOutput.txt", sep = "\t", col.names = TRUE, row.names = FALSE)

从这里,我得到一个如下所示的输出:

"Variable..1."  "Variable..2."
"1"    "111"    "Something"
"2"    "Nothing"    "222"

现在,这个输出存在一些问题。

  1. “[”和“]”符号已转换为点。
  2. 空格已转换为点。
  3. 引用标志随处可见。
  4. 如何使输出文件看起来与输入文件完全相同?

    到目前为止我尝试了什么

    关于第一和第二个问题,我尝试通过创建内部向量c("Variable [1]", "Variable [2]"),然后使用col.names read.table()选项来指定列名。这给了我完全相同的输出。我还通过encoding的{​​{1}}选项尝试了不同的编码。如果我查看上面提到的内部创建的向量,它会打印变量名称,因为它们应该被打印,所以我猜在“text - &gt; R”和“R - &gt; text”之间的转换存在问题。这个过程的各个阶段。也就是说,如果我查看由table.read()创建的数据框而没有任何内部创建的向量,则列名称是错误的。

    至于第三个问题,我几乎迷失了,并且无法弄清楚我应该尝试什么。

1 个答案:

答案 0 :(得分:9)

将以下输入文件指定为test.txt

Variable [1]    Variable [2]
111 Something
Nothing 222

如果列以制表符分隔,您可以使用以下代码创建精确副本:

a <- read.table(file='test.txt', check.names=F, sep='\t', header=T, 
    stringsAsFactors=F)
write.table(x=a, file='test_copy.txt', quote=F, row.names=F, 
    col.names=T, sep='\t')