/ /複数の文字列を日付に変更します-r、tidyverse、lubridate

複数の文字列を日付に変更する - r、tidyverse、lubridate

複数の文字列(約20)があり、すべてを日付形式に変更し、rを使用して時間を削除したいと思います。私はもう試した loops, mutate そして apply.

これは、2つの列のみを使用したサンプルデータです。

col1 = c("2017-04-01 23:00:00", "2017-03-03 00:00:01", "2017-04-02
00:00:01")
col2 = c("2017-04-10 08:41:49", "2017-04-10 08:39:48", "2017-04-10
08:41:51")
df <- cbind(col1, col2)

私はもう試した:

df <- df %>% mutate(df, funs(ymd))

そして

df <- df %>% mutate(df, funs(mdy))

両方とも私にエラーを与えました。また、すべての列名をリストに入れて、

for(i in namedlist) {
as_date(df[i])
glimpse(df)
}

それもうまくいきませんでした。

私はからの答えを使用しようとしました lubridateとdplyrを使用して複数の列を日付に変換します そしてそれもうまくいきませんでした。その投稿では、特定の変数を変換する必要がありました。すべての変数を変換して、 var コマンドは適用されません。

これを効率的に行うための提案はありますか?ありがとうございました。

回答:

回答№1は1

すべての列に適用する場合は、次のコマンドで非常に短い呼び出しを行うことができます。 lapply。ここで使用して渡します data.table

library( data.table )
setDT( df )

df <- df[ , lapply( .SD, as.Date ) ]

テストデータでは、これにより次のことがわかります。

> df
col1       col2
1: 2017-04-01 2017-04-10
2: 2017-03-03 2017-04-10
3: 2017-04-02 2017-04-10

注:テストデータは実際には matrix、それであなたはそれをに変換する必要があります data.frame 最初に(または直接 data.table)。

ベースだけでも同じことができます R、しかし私は個人的に上記の解決策の方が好きです:

df <- as.data.frame( lapply( df, as.Date ) )

> df
col1       col2
1 2017-04-01 2017-04-10
2 2017-03-03 2017-04-10
3 2017-04-02 2017-04-10