R语言 我怎样才能只在特定值上加零而不影响其他值呢?

6l7fqoea  于 2023-06-19  发布在  其他
关注(0)|答案(2)|浏览(126)

我怎么能只给一个特定的值加一个零而不影响其他的值,如果它满足我的值有12位数的条件,我需要它有13位数,其他的10位数?

x=c(102030301,223456783,5234567123,916784443214)

if_else(x>=12, false = paste0("0",x),true = stringr::str_pad(x, 10, side = "left", pad = 0))

我尝试了这个代码,但它没有给予我预期的结果。
我想获得下面的结果这是要将它应用到一个ID超过1000条记录的数据库

"0102030301"   "0223456783"   "5234567123"   "0916784443214"
unguejic

unguejic1#

你有几个问题。

  1. x是数字,所以当你测试x >= 12时,它的值,而不是字符数。使用nchar(x)获取字符数。
    1.您的条件颠倒了-if_else(x>=12, ..., true = stringr::str_pad(x, 10, side = "left", pad = 0))只填充12个长度的数字,最多为10个长度...什么都不做
    1.我不知道如果输入有11个字符你想发生什么...有了这个代码(模仿你的),它将被填充到12。
if_else(nchar(x) >= 12, 
  true = stringr::str_pad(x, 13, side = "left", pad = 0),
  false =  stringr::str_pad(x, 10, side = "left", pad = 0)
)
# [1] "0102030301"    "0223456783"    "5234567123"    "0916784443214"

在这两种情况下使用str_pad感觉更安全,因为你说如果它从12或更多开始,你希望得到的位数是13(尽管这不会减少14或更多位数的输入)。

xjreopfe

xjreopfe2#

下面是一个使用Gregor方法的更简单的解决方案,但仅限于您的确切例子:

x <- c(102030301,223456783,5234567123,916784443214)
x2 <- as.character(x)
k <- sapply(x2, function(z) if (nchar(z) == 12 | nchar(z) == 9) { z = paste0("0", z) } else {z})
k
      102030301       223456783      5234567123    916784443214 
   "0102030301"    "0223456783"    "5234567123" "0916784443214" 

# if you want to get rid of the names
names(k) <- NULL
k
[1] "0102030301"    "0223456783"    "5234567123"    "0916784443214"

相关问题