首页 > 解决方案 > 将数据框中的 week.year 格式化为在 R 中从零开始

问题描述

我有一个数据框列表,其中每个数据框都包含格式为 week.year 的日期,例如 01.2019、02.2019 等。我想在个位数周前保留 0,例如 01 或 02,因为现在它正在将其更改为 1,2,依此类推。我编写了以下代码,它在 dataset$CAL 列具有 week.year 值的情况下完美运行。

X <-list()
x <- nchar(dataset$CAL)
counter=1
for (i in x) {

  if (i==6){
    dataset$CAL[counter]<- paste0("0", dataset$CAL[counter])
  } 
  else {
    dataset$CAL[counter]<-dataset$CAL[counter]
  }
  counter <- counter+1
}

但这有一个严重的性能问题,加载时间太长,当然也不推荐在 R 中使用 for 循环。我尝试使用 lapply 函数,但它没有给出适当的结果

dataset$CAL <- lapply(dataset$CAL, function(x) if (nchar(dataset$CAL)==6) {paste0("0", dataset$CAL)} else {dataset$CAL})

这个方向的任何指示?非常感谢帮助。

标签: rdataframelapply

解决方案


我认为sprintf可以解决问题:

dataset$CAL2 <- sprintf("%06s", dataset$CAL)

或使用str_padfrom stringr

dataset$CAL2 <- stringr::str_pad(dataset$CAL, 6, pad = "0")

推荐阅读