导入R后添加前导零

时间:2016-03-07 12:44:42

标签: r dataframe zero read.csv leading-zero

我有一个包含Reference列的数据框。这是一个10位数字,可以以零开头。 导入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"

当数字已经有10位数时,第一个输出给出NA,第二个输出以标准形式存储结果。

我需要的是:

[1]  0102030405 2567894562  0235648759

2 个答案:

答案 0 :(得分:5)

compile('com.paypal.sdk:paypal-android-sdk:2.12.3') {
    exclude group: 'io.card'
}

替代解决方案:Adding leading zeros using R

  

导入R时,前导零消失,我想要   重新加入。

以字符形式读取列将彻底避免此问题。您可以将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 readr::read_csv()参数一起使用。

答案 1 :(得分:1)

formatC

您可以使用

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

的sprintf

d中使用sprintf表示您的值是整数(或者必须使用as.integer()转换)。 help(integer)解释说:

  

“可表示整数的范围被限制在大约+/- 2 * 10 ^ 9:双精度可以精确地保持更大的整数。”

这就是as.integer(2567894562)返回NA的原因。

另一种解决方法是在s中使用字符格式sprintf

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

但这会给出空格而不是前导零。 gsub()可以通过用零替换空格来添加零:

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