2016-07-29 10 views
0

私はPOSIXctに変換しているタイムスタンプ列を持っています。問題は、同じ列に2つの異なるフォーマットがあることです。したがって、より一般的な変換を使用すると、もう一方はNAに変換されます。2つのタイムスタンプ形式R

MC$Date <- as.POSIXct(MC$Date, tz='MST', format = '%m/%d/%Y %H:%M') 

結果:私はPOSIXctに変換するために、次のコードを使用

MC$Date  
12/1/15 22:00  
12/1/15 23:00  
12/2/15  
12/2/15 1:00  
12/2/15 2:00 

MC$Date  
15-12-01 22:00:00  
15-12-01 23:00:00  
NA  
15-12-02 01:00:00  
15-12-02 02:00:00 

I問題を識別するための論理ベクターを用いて試みたが、それを修正するが、簡単な解決策を見つけることができません。

答えて

0

私は論理ベクトルのアプローチがうまくいくと思います。解析されていないものを壊さずに解析された日付を保持するための一時的なベクトルと並んでいるかもしれません。このようなもの:

dates <- as.POSIXct(MC$Date, tz='MST', format = '%m/%d/%Y %H:%M') 
dates[is.na(dates)] <- as.POSIXct(MC[is.na(dates),], tz='MST', format = '%m/%d/%Y') 
MC$Date <- dates 
4

lubridateパッケージは、このような状況に対処するように設計されています。

dt <- c(
"12/1/15 22:00", 
"12/1/15 23:00", 
"12/2/15", 
"12/2/15 1:00", 
"12/2/15 2:00" 
) 
dt 
[1] "12/1/15 22:00" "12/1/15 23:00" "12/2/15"  "12/2/15 1:00" "12/2/15 2:00" 
lubridate::mdy_hm(dt, truncated = 2) 
[1] "2015-12-01 22:00:00 UTC" "2015-12-01 23:00:00 UTC" "2015-12-02 00:00:00 UTC" 
[4] "2015-12-02 01:00:00 UTC" "2015-12-02 02:00:00 UTC" 

パラメータtruncatedは、欠落する可能性のあるフォーマットの数を示します。

UTCが適切でない場合に、tzパラメータを追加して、日付を解析するタイムゾーンを指定することができます。

0

すべての日付時刻は日付と時刻の間のスペースで区切られているので、strsplitを使用して日付部分のみを抽出することができます。

extractDate <- function(x){ strsplit(x, split = " ")[[1]][1] } 
MC$Date <- sapply(MC$Date, extractDate) 

次に、時間の部分が途中で入ることを心配することなく、あなたが好きなように変換してください。

関連する問題