我有一个制表符分隔的输入文件,如下所示:
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"
现在,这个输出存在一些问题。
如何使输出文件看起来与输入文件完全相同?
关于第一和第二个问题,我尝试通过创建内部向量c("Variable [1]", "Variable [2]")
,然后使用col.names
read.table()
选项来指定列名。这给了我完全相同的输出。我还通过encoding
的{{1}}选项尝试了不同的编码。如果我查看上面提到的内部创建的向量,它会打印变量名称,因为它们应该被打印,所以我猜在“text - &gt; R”和“R - &gt; text”之间的转换存在问题。这个过程的各个阶段。也就是说,如果我查看由table.read()
创建的数据框而没有任何内部创建的向量,则列名称是错误的。
至于第三个问题,我几乎迷失了,并且无法弄清楚我应该尝试什么。
答案 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')