我有两个数据框,想将它们连接到每个数据框的两列组合中。
例如,假设我有这两个小标题:
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
为 v2
的各种值循环 1-6。我的想法是我应该将 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")
答案 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"