为单个数字添加零前缀
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
的各种值。我的想法是我应该将 v1
和 v2
组合成一个主 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"
我有两个数据框,想将它们加入到每个数据框的两列组合中。
例如,假设我有这两个小问题:
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
的各种值。我的想法是我应该将 v1
和 v2
组合成一个主 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"