форматирование week.year во фреймах данных, чтобы иметь начальный ноль в R - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть список фреймов данных, где каждый фрейм данных содержит дату в формате week.year, например 01.2019, 02.2019 и т. Д. Я хотел бы сохранить 0 перед одиночными ди git неделями, такими как 01 или 02, поскольку сейчас он меняет его на 1,2 и так далее. Я написал следующий код, который прекрасно работает, когда столбец набора данных $ 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
}

Но из-за этого возникает серьезная проблема с производительностью, которая загружается слишком долго и, конечно же, используется для l oop в R не рекомендуется. Я пытался использовать функцию lapply, но она не дает соответствующих результатов

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

Есть ли какие-либо указатели в этом направлении ?? Очень ценю помощь.

Ответы [ 2 ]

1 голос
/ 16 апреля 2020

Я думаю, sprintf решит проблему:

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

Или используя str_pad из stringr.

dataset$CAL2 <- stringr::str_pad(dataset$CAL, 6, pad = "0")
0 голосов
/ 16 апреля 2020

Мы можем использовать sprintf с mutate

library(dplyr)
dataset %>%
  mutate(CAL2 = sprintf("%06s", CAL))
...