R 添加0';s到字符列

R 添加0';s到字符列,r,R,我有一个数据框,其中有一列字符值: df1 Col1 Col2 A 1 B 2 C 11 D 101 E 1000 我还有另一个数据集,它也包含字符值,但每个值都有5个数字,即使是一个小数字,如下所示: df2 Col1A Col2 F 00001 G 00002 H 00011 I 00101 J 010

我有一个数据框,其中有一列字符值:

df1
Col1     Col2    
   A        1
   B        2
   C       11
   D      101
   E     1000
我还有另一个数据集,它也包含字符值,但每个值都有5个数字,即使是一个小数字,如下所示:

df2
Col1A     Col2    
   F     00001
   G     00002
   H     00011
   I     00101
   J     01000
如何将0添加到df1,以便将两个数据帧连接在一起

预期产出:

df1
Col1      Col2     Col1A
   A     00001         F
   B     00002         G
   C     00011         H
   D     00101         I
   E     01000         J
像这样

 library(tidyverse)
 df1<-data.frame(Col1=c("A","B","C","D","E"),
                Col2=c(1,2,11,101,1000))

 df2<-data.frame(Col1=c("00001","00002","00011","00101","01000"),
                 Col2=c("F","G","H","I","J"))

 your_function=function(x){
   if(nchar(x)<5){
     x<-glue::collapse(c(rep("0",5-nchar(x)),x),sep="")
   }
   return(x)
 }
 df1%>%
   mutate(Col2=purrr::map_chr(Col2,your_function))%>%
   left_join(df2,by=c("Col2"="Col1"))
  Col1  Col2 Col2.y
1    A 00001      F
2    B 00002      G
3    C 00011      H
4    D 00101      I
5    E 01000      J
库(tidyverse)
df1数据:

0依赖基R:

setNames(merge(
  { xdf1$Col3 <- sprintf("%05s", xdf1$Col2) ; xdf1 },
  xdf2, by.x = "Col3", by.y = "Col2"
)[,c(2,1,4)], c("Col1", "Col2", "Col1A"))
##    Col1  Col2 Col1A
## 1    A 00001     F
## 2    B 00002     G
## 3    C 00011     H
## 4    D 00101     I
## 5    E 01000     J

xdf1$Col3 <- NULL # to preserve the original data frame
setNames(合并)(

{xdf1$Col3或者如何从
df2$Col2
中删除0并使其成为数字?这样会更可靠。你能分享你的预期输出吗?那也可以。字符串:
sprintf(“%05s”,c(“1”,“2”,“11”,“101”,“1000”)
;数字:
sprintf(“%05d”,c(1,2,11,101,1000))
@RonakShah^怎么不“可靠”?你真的应该在
glue
习惯用法和
sprintf()
之间做一个细微的区分。我怀疑节省的时间不是微不足道的。而且,你的
df1
df2
并不代表OP说他们有什么。
setNames(merge(
  { xdf1$Col3 <- sprintf("%05s", xdf1$Col2) ; xdf1 },
  xdf2, by.x = "Col3", by.y = "Col2"
)[,c(2,1,4)], c("Col1", "Col2", "Col1A"))
##    Col1  Col2 Col1A
## 1    A 00001     F
## 2    B 00002     G
## 3    C 00011     H
## 4    D 00101     I
## 5    E 01000     J

xdf1$Col3 <- NULL # to preserve the original data frame