2017-02-03 7 views
2

Вообще говоря, управление количеством цифр, отображаемых при вызове write.table, является простым. Учитывая отличный вопрос и ответ, увиденный here, мы видим, что format - это средство для достижения этого подвига. Однако это создает файл, который при просмотре текстовым редактором показывает кавычки вокруг числовых значений. Это можно отключить, установив quote = FALSE в write.table. К сожалению, у этого есть побочный эффект, не помещая котировки вокруг столбцов character. Обратите внимание:Управление количеством знаков после запятой в файле write.table при сохранении класса «числовой»

Нормальный случай (без формата и стандартного поведения выход)

df <- data.frame(c1 = 1:5/100, c2 = LETTERS[1:5]) 
write.table(df, file = "test.txt", sep = "|") 

## when you open test.txt in a text editor, the middle column correctly 
## appears as a numeric (i.e. no quotes), however there are only 2 decimals displayed. 
## It should also be noted that the quotes are present in c2 (this is what we want). 
    "c1"|"c2" 
"1"|0.01|"A" 
"2"|0.02|"B" 
"3"|0.03|"C" 
"4"|0.04|"D" 
"5"|0.05|"E" 

с форматом

df$c1 <- format(df$c1, digits = 4, nsmall = 4) 
write.table(df, file = "test.txt", sep = "|") 

## when you open test.txt in a text editor, the middle column correctly 
## displays four decimal places, however it now appears to be a character 
## (i.e. with quotes). Again, it should be noted that the quotes are 
## present in c2 (again, this is what we want). 
    "c1" |"c2" 
"1"|"0.0100"|"A" 
"2"|"0.0200"|"B" 
"3"|"0.0300"|"C" 
"4"|"0.0400"|"D" 
"5"|"0.0500"|"E" 

цитатами = FALSE

write.table(df, file = "test.txt", sep = "|", quote = FALSE) 

## when you open test.txt in a text editor, the middle column correctly 
## displays four decimal places with no quotes. However the quotes on column 
## c2 (and everywhere else) have been dropped (this is NOT what we want). 
    c1 |c2 
1|0.0100|A 
2|0.0200|B 
3|0.0300|C 
4|0.0400|D 
5|0.0500|E 

Вопрос

Есть ли способ записать фрейм данных в файл, который управляет числом десятичных знаков при сохранении стандартных инструкций write.table для отображения котировок (т. нет кавычек вокруг числовых полей и котировок вокруг полей символов)? Вот мой желаемый результат:

 "c1" |"c2" 
"1"|0.0100|"A" 
"2"|0.0200|"B" 
"3"|0.0300|"C" 
"4"|0.0400|"D" 
"5"|0.0500|"E" 
+0

Помогло ли вам использовать 'round()' перед написанием таблицы? –

ответ

3

цитата аргумент в write.table поддерживает числовые векторы, чтобы указать расположение столбцов, чтобы добавить кавычки, так

write.table(df, file = "test.txt", sep = "|", quote = 2) 

работ для этого примера, производя

"c1"|"c2" 
"1"|0.01|"A" 
"2"|0.02|"B" 
"3"|0.03|"C" 
"4"|0.04|"D" 
"5"|0.05|"E"