为单个数字添加零前缀

Add a zero prefix to a single digit number

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

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

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'))

假设 v1 循环 1-6 以获得 v2 的各种值。我的想法是我应该将 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")

我们可以使用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   

您可以使用 str_pad:

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