R 我如何使用已知日期格式的因子级别来通知数据帧的其余部分?

R 我如何使用已知日期格式的因子级别来通知数据帧的其余部分?,r,date,time,R,Date,Time,我有多个人的GPS数据,但日期不一致。例如,有些格式为%d/%m/%Y%H:%m”格式,但其他格式为%m/%d/%Y%H:%m”格式。这很令人困惑,但我知道其中一个人的正确顺序 我可以用它来通知来自lubridate包的日期转换parse\u date\u time?或者,解决这种模糊性的最佳方法是什么 date, id, "10/01/2014 08:00", A # these are day/month/year format "10/01/2014 06:00", A "09/01/20

我有多个人的GPS数据,但日期不一致。例如,有些格式为
%d/%m/%Y%H:%m”
格式,但其他格式为
%m/%d/%Y%H:%m”
格式。这很令人困惑,但我知道其中一个人的正确顺序

我可以用它来通知来自
lubridate
包的日期转换
parse\u date\u time
?或者,解决这种模糊性的最佳方法是什么

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

您可以使用
dplyr
函数
mutate
case\u执行此操作,当
使用
id
列相应地应用
dmy\u hm
mdy\u hm
函数

库(dplyr)
图书馆(tibble)#供tribble使用
图书馆(lubridate)
df#A tible:10 x 2
#>日期id
#>                  
#>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:00A
#>5 2014-01-09 12:00:00 A
#>6 2014-01-09上午10:00:00
#>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

由(v0.2.1)于2019-01-18创建您可以使用
dplyr
函数
mutate
case\u when
使用
id
列相应地应用
dmy\u hm
mdy\u hm
函数

库(dplyr)
图书馆(tibble)#供tribble使用
图书馆(lubridate)
df#A tible:10 x 2
#>日期id
#>                  
#>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:00A
#>5 2014-01-09 12:00:00 A
#>6 2014-01-09上午10:00:00
#>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

由(v0.2.1)

于2019-01-18创建,经过几次试验后,我了解到,
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    
日期id
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:00A
5 2014-01-09 12:00:00 A
6 2014-01-09上午10:00:00
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

经过几次试验,我了解到
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    
日期id
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:00A
5 2014-01-09 12:00:00 A
6 2014-01-09上午10:00:00
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

太棒了!多个条件的语法是什么<代码>id==“A”| id==“C”
正确
case\u当
还可以通过指定
TRUE~“whatever”
来包含“notmatched”(不匹配)。almsot完成了,但date不断返回有趣的数字,不知道该怎么做。返回的内容如下:第一行为1389340800,可能有什么问题?如果有区别的话,我们使用了
ifelse
。太棒了!多个条件的语法是什么<代码>id==“A”| id==“C”
正确
case\u当
还可以通过指定
TRUE~“whatever”
来包含“notmatched”(不匹配)。almsot完成了,但date不断返回有趣的数字,不知道该怎么做。返回的内容如下:第一行为1389340800,可能有什么问题?正在使用
ifelse
,如果这有区别的话。