将数字转换为特殊格式

时间:2017-09-05 20:31:44

标签: r

在我的数据处理中,我需要执行以下操作:

    #convert '7-25' to '0007 0025'
    #pad 0's to make each four-digit number 
    digits.formatter <- function ('7-25'){.......?}

我不知道如何在R中做到这一点。任何人都可以帮忙吗?

3 个答案:

答案 0 :(得分:6)

在基础R中,将字符串(或字符串矢量)拆分为-,将其部分转换为数字,使用sprintf格式化部分,然后将它们粘贴在一起。

sapply(strsplit(c("7-25", "20-13"), "-"), function(x)
    paste(sprintf("%04d", as.numeric(x)), collapse = " "))
#[1] "0007 0025" "0020 0013"

答案 1 :(得分:3)

stringr的解决方案:

library(stringr)

digits.formatter <- function(string){
  str_vec = str_split(string, "-")
  output = sapply(str_vec, function(x){
    str_padded = str_pad(x, width = 4, pad = "0")
    paste(str_padded, collapse = " ")
  })
  return(output)
}

digits.formatter(c('7-25', '8-30'))
# [1] "0007 0025" "0008 0030"

pad=中的str_pad参数指定您要填充的内容,而width=指定填充字符串的最小宽度。您还可以使用可选参数side=来指定要填充字符串的一侧(默认为side=left)。例如:

str_pad(1:5, width = 4, pad = "0", side = "right")
# [1] "1000" "2000" "3000" "4000" "5000"

答案 2 :(得分:0)

我们可以使用gsubfn

执行此操作
library(gsubfn)
gsubfn("(\\d+)", ~sprintf("%04d", as.numeric(x)), v1)
#[1] "0007-0025" "0020-0013"

如果我们不需要-

sub

之后使用gsubfn
sub("-", " ", gsubfn("(\\d+)", ~sprintf("%04d", as.numeric(x)), v1))
#[1] "0007 0025" "0020 0013"

或直接在gsubfn

中使用两个捕获组
gsubfn("(\\d+)-(\\d+)", ~sprintf("%04d %04d", as.numeric(x), as.numeric(y)), v1)
#[1] "0007 0025" "0020 0013"

数据

v1 <- c("7-25", "20-13")