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