我有一个data.frame,它有两列。但是,我需要从当前格式转换5位整数的psw
列格式。如何在psw
列中自动将1位数更改为5位?如何轻松地在R中完成此操作?感谢
这是可重复的data.frame
mydat <- data.frame(ID=LETTERS[seq( from = 1, to = 6)],
psw=c(10501,3,80310,8930,234,1))
> mydat
ID psw
1 A 10501
2 B 3
3 C 80310
4 D 8930
5 E 234
6 F 1
这是我想要的输出:
> mydat
ID psw
1 A 10501
2 B 00003
3 C 80310
4 D 08930
5 E 00234
6 F 00001
答案 0 :(得分:2)
您可以在保持psw
列数字的同时执行此操作,但您可以将其格式化为特定宽度作为字符向量。以下是两种方法:
在基地R中,您可以使用formatC()
:
mydat <- data.frame(ID=LETTERS[seq( from = 1, to = 6)],
psw=c(10501,3,80310,8930,234,1))
mydat$psw <- formatC(mydat$psw, width = 5, format = "d", flag = "0")
mydat
# ID psw
# 1 A 10501
# 2 B 00003
# 3 C 80310
# 4 D 08930
# 5 E 00234
# 6 F 00001
在stringr
中,您可以使用str_pad()
:
install.packages("stringr")
library(stringr)
mydat <- data.frame(ID=LETTERS[seq( from = 1, to = 6)],
psw=c(10501,3,80310,8930,234,1))
mydat$psw <- str_pad(mydat$psw, width = 5, pad = "0")
mydat
# ID psw
# 1 A 10501
# 2 B 00003
# 3 C 80310
# 4 D 08930
# 5 E 00234
# 6 F 00001
答案 1 :(得分:1)
甚至可以在sprintf
中使用base-R
。
mydat$psw <- sprintf("%05d",mydat$psw)
mydat
# ID psw
# 1 A 10501
# 2 B 00003
# 3 C 80310
# 4 D 08930
# 5 E 00234
# 6 F 00001