为一位数添加零前缀

时间:2021-07-10 20:25:04

标签: r stringr

我有两个数据框,想将它们连接到每个数据框的两列组合中。

例如,假设我有这两个小标题:

df1 <- tibble(v1 = c('1', '2', '3', '4', '5', '6'), c('20', '22', '24', '26', '28', '30'))

df2 <- tibble(v1 = c('01', '02', '03', '04', '05', '06'), c('20', '22', '24', '26', '28', '30'))

假设 v1v2 的各种值循环 1-6。我的想法是我应该将 v1v2 组合到一个主 ID var,然后我可以加入两个数据帧。但问题是在 df1 中,10 以下的数字前面没有 0,但在 df2 中有 0。因此,作为解决方案,我想在 df1 中的个位数中添加一个零。

这是我目前所拥有的,但还不太奏效:

df1 <- df1 %>% 
  mutate(idvar = str_c(v1, '.', v2)) %>% 
  if str_length(idvar) == 4{
    mutate(idvar = str_sub(.$idvar, 1, regexpr(" O", .$idvar)-1))
  }

知道我哪里出错了吗?

目标是然后运行:

df1 %>% left_join(df2, by = "idvar")

2 个答案:

答案 0 :(得分:2)

我们可以使用sprintf

library(dplyr)
df1 <- df1 %>%
    mutate(v1 = sprintf('%02d', as.numeric(v1)))

或使用 str_pad

library(stringr)
df1 %>% 
    mutate(v1 = str_pad(v1, width = 2, pad = '0'))

-输出

# A tibble: 6 x 2
  v1    v2   
  <chr> <chr>
1 01    20   
2 02    22   
3 03    24   
4 04    26   
5 05    28   
6 06    30   

答案 1 :(得分:2)

您可以使用str_pad

library(stringr) 
str_pad(df1$v1, width = 2, side = "left", "0")
[1] "01" "02" "03" "04" "05" "06"