如何在给定的data.frame中进行自定义数字格式转换?

时间:2018-03-18 20:13:20

标签: r dataframe

我有一个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

2 个答案:

答案 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