Прочитать файл с разделителями табуляции с необычными символами, а затем написать точную копию - PullRequest
6 голосов
/ 23 ноября 2011

проблема

У меня есть входной файл с разделителями табуляции, который выглядит так:

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. Кавычки появились везде.

Как сделать так, чтобы выходной файл выглядел точно так же, как и входной файл?

Что я пробовал до сих пор

Что касается проблемы номер один и два, я попытался указать имена столбцов, создав внутренний вектор c("Variable [1]", "Variable [2]"), а затем используя параметр col.names для read.table(). Это дает мне точно такой же вывод. Я также пробовал разные кодировки, через опцию encoding для table.read(). Если я посмотрю на созданный внутри вектора, упомянутый выше, он печатает имена переменных так, как они должны быть напечатаны, поэтому я предполагаю, что есть проблема с преобразованием между фазами "text -> R" и "R -> text" процесс. То есть, если я посмотрю на фрейм данных, созданный read.table() без каких-либо внутренних векторов, имена столбцов будут неправильными.

Что касается проблемы номер три, я в значительной степени заблудился и не смог понять, что мне следует попробовать.

1 Ответ

9 голосов
/ 23 ноября 2011

Учитывая следующий входной файл как 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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...