Ошибка при замене данных в R путем идентификации столбцов даты - PullRequest
0 голосов
/ 01 мая 2020

Это ввод

library(lubridate)
        library(tidyverse)
        library(stringr)
        library(dplyr) 

        dataset <- data.frame(A = c("12345 Software Inc","12346 Software In","123463 Software In"),
                      B = c(12345,1234523,234234234),
                      C = c(ABC-1244, DEF-1134,ACF-1234),
                      X.Y DATE = c("1-May-2019","2-Jun-2020","3-July-2020"),
                      XX.YY DATE = c("1-May-2019","5-Jun-2020","4-July-2020"),
                      Check_DATE = c("1-May-2019","2-Jun-2020","3-July-2020")
)

        date_parser <- function(column){
              if(any(grepl("[-]",column))){
                format(parse_date_time(column,orders = c("bdy","dmy","dby","ymd","mdy","ydm","%d-%m-%Y %H:%M:%S","%m-%d-%Y %H:%M:%S","%Y-%m-%d %H:%M:%S","%d-%m-%Y","%d-%b-%Y")),"%d-%m-%Y")
              }
              else column
            }


            date_format_change <- function(dataset1) { 
              data <- dataset1 %>% 
                mutate_at(-1,~ stringr::str_replace_all(.,"\\/","-")) %>% 
                purrr::map_dfr(~date_parser(.))
              View(data)
            }
            date_format_change(dataset)

Output Received : [![enter image description here][2]][2]


  [1]: https://i.stack

.

Дата не изменилась. и enter image description here там столбцы стали NA. Я хочу, чтобы на выходе не было столбцов NA, а дата должна быть DD-MM-YYYY

1 Ответ

0 голосов
/ 01 мая 2020

Из приведенных выше комментариев я понимаю, что ваша задача состоит в том, чтобы (i) определить столбцы, содержащие даты, и (ii) изменить формат дат. Вот решение, которое использует grepl для сопоставления дат и apply и lubridate для изменения формата даты:

library(lubridate)

dataset[apply(dataset, 2, function(x) all(grepl("\\d{1,2}-[A-z]{3,4}-\\d{4}", x)))] <-
  apply(dataset[apply(dataset, 2, function(x) all(grepl("\\d{1,2}-[A-z]{3,4}-\\d{4}", x)))], 2, 
        function(x) format(parse_date_time(x, orders = "%d-%b-%Y"), "%d-%m-%Y"))

Результат:

dataset
                   A         B   X.Y_DATE XX.YY_DATE Check_DATE
1 12345 Software Inc     12345 01-05-2019 01-05-2019 01-05-2019
2  12346 Software In   1234523 02-06-2020 05-06-2020 02-06-2020
3 123463 Software In 234234234 03-07-2020 04-07-2020 03-07-2020

Данные:

dataset <- data.frame(A = c("12345 Software Inc","12346 Software In","123463 Software In"), 
                      B = c(12345,1234523,234234234), 
                      X.Y_DATE = c("1-May-2019","2-Jun-2020","3-July-2020"), 
                      XX.YY_DATE = c("1-May-2019","5-Jun-2020","4-July-2020"), 
                      Check_DATE = c("1-May-2019","2-Jun-2020","3-July-2020"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...