2016-03-07 89 views
1

我有一個數據框,其中包括一個Reference列。這是一個10位數字,可以從零開始。 當導入到R時,前導零消失,我想補充回來。一旦導入到R中加入前導零

我試過使用sprintfformatC,但我有不同的問題與每個。

DF=data.frame(Reference=c(102030405,2567894562,235648759), Data=c(10,20,30)) 

我得到的輸出是下面的:

> sprintf('%010d', DF$Reference) 
[1] "0102030405" "  NA" "0235648759" 
Warning message: 
In sprintf("%010d", DF$Reference) : NAs introduced by coercion 
> formatC(DF$Reference, width=10, flag="0") 
[1] "001.02e+08" "02.568e+09" "02.356e+08" 

第一輸出給出NA當數已經有10位數字,並把結果的第二存儲在標準形式。

我需要的是:

[1] 0102030405 2567894562 0235648759 
+2

我想你期望的輸出不與前導零反映.. – akrun

+0

通過實例工作在http://stackoverflow.com/questions/5812493/adding -leading-zeros-using-r,導致'library(stringr); str_pad(DF $參考,10,pad =「0」)' – user20650

+0

我剛剛發現並編輯了這篇文章。我之前並沒有來過acorss'str_pad',但它似乎正在訣竅中。謝謝。 – sym246

回答

4
library(stringi) 
DF = data.frame(Reference = c(102030405,2567894562,235648759), Data = c(10,20,30)) 
DF$Reference = stri_pad_left(DF$Reference, 10, "0") 
DF 
# Reference Data 
# 1 0102030405 10 
# 2 2567894562 20 
# 3 0235648759 30 

替代方案:Adding leading zeros using R

當導入到R,前導零消失了,這是我想 加回。

閱讀作爲字符將徹底避免這一問題列(S)。您可以使用readr::read_csv()col_types參數。

+1

真實解決方案的道具:首先正確讀取文件。 –

+2

儘管'colClasses'參數的'read.csv'和'col_types'的'read_csv'一樣。 –

+0

沒錯,謝謝指向colClasses。 (http://stackoverflow.com/questions/2805357/specifying-colclasses-in-the-read-csv) – effel

1

formatC

您可以使用

formatC(DF$Reference, digits = 0, width = 10, format ="f", flag="0") 
# [1] "0102030405" "2567894562" "0235648759" 

的sprintf

使用的sprintfd意味着你的價值觀是整數(或他們與as.integer()被轉換)。 help(integer)解釋如下:

「可表示整數的範圍限制在+/- 2 * 10^9以內:雙精度可以保持更大的整數。」

這就是爲什麼as.integer(2567894562)返回NA

另一種解決辦法將是sprintf使用字符格式s

sprintf('%010s',DF$Reference) 
# [1] " 102030405" "2567894562" " 235648759" 

但是這給空格代替前導零。 gsub()可以通過更換零添加空格零回:

gsub(" ","0",sprintf('%010s',DF$Reference)) 
# [1] "0102030405" "2567894562" "0235648759"