Эффективный способ перекодировать несколько значений даты в R - PullRequest
1 голос
/ 19 апреля 2019

У меня довольно большая месячная база данных, в которой даты записываются плохо.

Например, для января 2000 года значение равно «200001». Таким образом, у меня есть значения в диапазоне от "200001" до "200012". Что еще хуже, каждый месяц записывается в другой файл .csv.

Сначала я загрузил все файлы .csv вместе, создав список, который я назвал "tbl". Так, например, tbl [[1]] возвращает значения за январь. Мне нужно найти эффективный способ переоценки «20000i» в «2000-01-0i», где я перехожу от 1 до 12, а затем преобразовать эти значения в формат даты.

То, что я пробовал, это:

for (i in length(tbl)) {
  if (i < 10) {
    tbl[[i]]$DATA %>% as.character() %>% revalue(c(paste0("20000",i) = paste0("2000-01-0",i))) %>%  as.Date() -> tbl[[i]]$DATA
  } else {
    tbl[[i]]$DATA %>% as.character() %>% revalue(c(paste0("2000",i) = paste0("2000-01-",i))) %>%  as.Date() -> tbl[[i]]$DATA
  }
}

Этот подход не работает и возвращает следующую ошибку: Error: unexpected '=' in " tbl[[i]]$DATA %>% as.character() %>% revalue(c(paste0("2000",i) ="

У кого-нибудь есть идея получше?

РЕДАКТИРОВАТЬ: пример моих данных

list(c("200001", "200001", "200001", "200001", "200001", "200001","200001", "200001", "200001", "200001", "200001", "200001"), 
c("200002", "200002", "200002", "200002", "200002", "200002", 
"200002", "200002", "200002", "200002", "200002", "200002"
), c("200003", "200003", "200003", "200003", "200003", "200003", 
"200003", "200003", "200003", "200003", "200003", "200003"
), c("200004", "200004", "200004", "200004", "200004", "200004", 
"200004", "200004", "200004", "200004", "200004", "200004"
), c("200005", "200005", "200005", "200005", "200005", "200005", 
"200005", "200005", "200005", "200005", "200005", "200005"
), c("200006", "200006", "200006", "200006", "200006", "200006", 
"200006", "200006", "200006", "200006", "200006", "200006"
), c("200007", "200007", "200007", "200007", "200007", "200007", 
"200007", "200007", "200007", "200007", "200007", "200007"
), c("200008", "200008", "200008", "200008", "200008", "200008", 
"200008", "200008", "200008", "200008", "200008", "200008"
), c("200009", "200009", "200009", "200009", "200009", "200009", 
"200009", "200009", "200009", "200009", "200009", "200009"
), c("200010", "200010", "200010", "200010", "200010", "200010", 
"200010", "200010", "200010", "200010", "200010", "200010"
), c("200011", "200011", "200011", "200011", "200011", "200011", 
"200011", "200011", "200011", "200011", "200011", "200011"
), c("200012", "200012", "200012", "200012", "200012", "200012", 
"200012", "200012", "200012", "200012", "200012", "200012"
))

1 Ответ

2 голосов
/ 19 апреля 2019

Чтобы преобразовать ваш ввод в объект даты, вам нужно добавить день в год и затем использовать правильный формат:

for (i in 1:length(tbl)) {
   tbl[[i]]$DATA <- as.Date(paste(tbl[[i]]$DATA, 01), "%Y%m %d")
}

Это сделает каждый ввод первым днем ​​или месяцем.,Всего за десяток десятков цикл for достаточно быстрый.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...