Как я могу использовать уровень фактора с известным форматом даты, чтобы проинформировать остальную часть моего кадра данных? - PullRequest
0 голосов
/ 18 января 2019

У меня есть данные GPS для нескольких лиц, но даты не совпадают. Например, некоторые в формате "%d/%m/%Y %H:%M", а другие в формате "%m/%d/%Y %H:%M". Это очень сбивает с толку, но я знаю правильный порядок одного из людей.

Можно ли использовать это для информирования о преобразовании даты parse_date_time из пакета lubridate? Или как лучше обойти эту неопределенность?

date, id,
"10/01/2014 08:00", A # these are day/month/year format
"10/01/2014 06:00", A
"09/01/2014 18:00", A
"09/01/2014 15:00", A
"09/01/2014 12:00", A
"09/01/2014 10:00", A
"10/01/2014 10:00", B # these are month/day/year format
"10/01/2014 10:00", B
"10/01/2014 10:00", B
"10/01/2014 10:00", B

Ответы [ 2 ]

0 голосов
/ 18 января 2019

После нескольких испытаний я узнал, что ifelse от базовых принуждений к удвоению. if_else однако помогает решить проблему:

   library(tidyverse)
      df %>% 
  mutate(id=as.factor(id),
         date=if_else(id=="A",dmy_hm(date),mdy_hm(date)))

Результат:

 date                id   
   <dttm>              <fct>
 1 2014-01-10 08:00:00 A    
 2 2014-01-10 06:00:00 A    
 3 2014-01-09 18:00:00 A    
 4 2014-01-09 15:00:00 A    
 5 2014-01-09 12:00:00 A    
 6 2014-01-09 10:00:00 A    
 7 2014-10-01 10:00:00 B    
 8 2014-10-01 10:00:00 B    
 9 2014-10-01 10:00:00 B    
10 2014-10-01 10:00:00 B    
0 голосов
/ 18 января 2019

Это можно сделать с помощью dplyr функций mutate и case_when, чтобы использовать столбец id для применения функции dmy_hm или mdy_hm соответственно.

library(dplyr)
library(tibble) # for tribble
library(lubridate)

df <- tribble(~date, ~id,
"10/01/2014 08:00", "A", # these are day/month/year format
"10/01/2014 06:00", "A",
"09/01/2014 18:00", "A",
"09/01/2014 15:00", "A",
"09/01/2014 12:00", "A",
"09/01/2014 10:00", "A",
"10/01/2014 10:00", "B", # these are month/day/year format
"10/01/2014 10:00", "B",
"10/01/2014 10:00", "B",
"10/01/2014 10:00", "B")

mutate(df, date = case_when(id == "A" ~ dmy_hm(date),
                        id == "B" ~ mdy_hm(date)))
#> # A tibble: 10 x 2
#>    date                id   
#>    <dttm>              <chr>
#>  1 2014-01-10 08:00:00 A    
#>  2 2014-01-10 06:00:00 A    
#>  3 2014-01-09 18:00:00 A    
#>  4 2014-01-09 15:00:00 A    
#>  5 2014-01-09 12:00:00 A    
#>  6 2014-01-09 10:00:00 A    
#>  7 2014-10-01 10:00:00 B    
#>  8 2014-10-01 10:00:00 B    
#>  9 2014-10-01 10:00:00 B    
#> 10 2014-10-01 10:00:00 B

Создано в 2019-01-18 пакетом Представление (v0.2.1)

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