2017-03-09 8 views
0

datetimeをRのmm/dd/yyyy形式に変換したいのですが、作成した新しい列のデータは切り捨てられています。以下のコードを使用して例を見ることができます。行番号6では、望ましい出力は11/16/2016ですが、11/16/201が表示されます。作成された列のRデータが切り捨てられました

library(dplyr) 

a <- c("2/23/2017 4:45", "2/15/2017 21:46", "2/10/2017 4:20", 
    "2/9/2017 7:19", "2/7/2017 3:23", "11/16/2016 0:58") 

test <- as.data.frame(a) 

test %>% mutate(new = substr(a, 1, regexpr(" ",a)[1]-1)) 

答えて

0

日付の値がある場合は、正規表現と部分文字列を使用するのではなく、日付の値として扱う方がよい場合があります。ここでdplyrやすい形式次に

parsect <- function(x, f="%m/%d/%Y %H:%M") { 
    as.POSIXct(strptime(x, f)) 
} 

にデータを解析するヘルパー関数を使用して、

test %>% mutate(new = strftime(parsect(a), "%Y-%m-%d")) 

parsect()が適切な日付/時刻値に値を向けるだろう行うことができます、あなたが使用することができますその日付/時刻をフォーマットするための基底語strftime()

regexpr()がベクター化されているため、あなたのメソッドは[1]の部分がなくても機能しているように見えますが、

test %>% mutate(new = substr(a, 1, regexpr(" ",a)-1)) 

[1]はスペースが最初の値で発見された位置を使用するすべての行を余儀なくされました。

+0

ありがとうございます!それは今働く。 –

関連する問題