2010-10-20 62 views
20

1E-5,而不是我用read.table讀取包含數字,如0.00001數字格式,書寫0.00001

一個文件時,我寫他們回來write.table這些數字顯示爲1E-5

我怎樣才能保持舊的格式?

回答

15

您可以通過格式轉換你的號碼爲字符串根據您的需要,然後使用參數quote = FALSE在調用write.table做到這一點。

dfr <- data.frame(x = 10^(0:15)) 
dfr$y <- format(dfr$x, scientific = FALSE) 
write.table(dfr, file = "test.txt", quote = FALSE) 

請注意,您不應該更改文件中數字的格式。幾乎每一件科學軟件和每個電子表格都可以理解數字的科學記號,並且還具有數字格式選項,因此您可以查看它們的選擇方式。

+1

格式化的文本文件,我也許應該提到的是使用'報價= FALSE'將停止所有** **字符和因子列被引用。 – 2010-10-20 17:08:48

+2

我將csv文件傳遞給postgres數據庫。默認的sql不會將1e + 5識別爲整數... – Rodrigo 2015-09-03 18:05:09

+0

例如Circos(http://circos.ca/)需要非科學格式。因此,我猜想,Perl不會將科學數字視爲整數。 – 2016-07-19 10:24:16

5

如果輸入是科學記數法和顯式記數法的混合,那麼您將編寫自己的解析器來讀取數字並記錄哪些是哪種格式。事實上,你會想要保留這些數字的字符串表示,因此你可以寫回,正好是輸入內容。

但是,如果您只是想以一致的顯式表示法編寫write.table(),請嘗試。

 
    write.table(format(_your_table_here_, scientific=FALSE), ...) 
34

我只會在撥打write.table之前更改scipen選項。請注意,這也會改變打印到控制檯時數字的顯示方式。

options(scipen=10) 
write.table(foo, "foo.txt") 
options(scipen=0) # restore the default 
+0

如果我只需要一行,而且我有幾個? – skan 2010-10-20 14:31:39

+5

@ user425895:然後你需要在你的問題中指定。 – 2010-10-20 14:39:06

+1

現代變體:'withr :: with_options(c(scipen = 10),write.table(foo,「foo.txt」)'。 – 2016-07-19 13:42:30

1

對於所有行的最大控制環和它們打印與的sprintf

# Find number of rows in data.frame test 
nrows <- dim(test)[1] 

# init a new vector 
mylines <- vector("character",dim(test)[1]) 

# loop over all rows in dataframe 
for(i in 1:nrows){ 
    # Print out exactly the format you want 
    mylines[i] <- sprintf("Line %d: %.2f\t%.2f",1,test[i,"x"],test[i,"y") 
} 

# write lines to file 
writeLines(mylines,"out.txt")