2015-04-14 78 views
0

過去幾個小時我一直在研究這個。我曾嘗試使用sprintf,但它將列更改爲字符。我想要做的就是有一個固定寬度的數字列,用零填充。前導零填充數字列

+2

如果不轉換爲字符類,則無法填充前導零。 – akrun

+3

數字沒有前導零。如果你想讓它們以特定的方式格式化,那麼你必須轉換成字符格式。 – MrFlick

+0

呃哦:(OK然後感​​謝yall – maryam

回答

3

如果你願意使用自定義類,你可以寫,做這種打印方法。做一個數據幀,並給它一個自定義類:

DF <- data.frame(a=letters[1:10], b=sample(c(1, 10, 100), 10, rep=T), c=sample(c(1, 10, 100), 10, rep=T)) 
class(DF) <- c("my_df", class(DF)) 

編寫使用@ BenBolker的格式打印方法:

print.my_df <- function(x, ...) { 
    num.cols <- sapply(x, is.numeric) 
    x[num.cols] <- lapply(x[num.cols], sprintf, fmt="%04d") 
    NextMethod() 
} 

然後:

DF 

產地:

a b c 
1 a 0100 0100 
2 b 0010 0001 
3 c 0001 0010 
4 d 0001 0100 
5 e 0001 0001 
6 f 0001 0001 
7 g 0001 0001 
8 h 0001 0100 
9 i 0001 0100 
10 j 0001 0001 

您仍然可以使用數據框架的方式相同,因爲數字僅在打印時轉換。

> sum(DF$b) 
[1] 118 
+0

這是行之有效的。謝謝布羅迪 – maryam

3

如果您提供更多的上下文,我們可能會幫助您解決最終(而非近端)問題,例如,如果你需要輸出在這種格式,但不包括引號:

> cat(sprintf("%04d",5),"\n") 
0005 
## or 
> print(sprintf("%04d",5),quote=FALSE) 
[1] 0005 

write.csv(...,quote=FALSE)可能也有幫助

+0

不錯,但不是打印,我想保存它作爲一個數據框中的列..每個人都說這是不可能的.. – maryam

+0

@maryam:它實際上是不可能的,因爲R將_value_存儲在數據框中,並且1 == 01 == 001等等。您可以隨時保留數字列進行計算,排序,或者添加一個用於顯示目的的字符 –

+0

@AlexA。好吧,謝謝Alex – maryam