2017-11-05 11 views
0

日付の列(日付、POSIXct、POSIXt)をデータフレームの文字列に変換したいと思います。たとえば、私はこのデータフレームを持っています。日付をデータフレーム内の文字に変換する

df <- data.frame(date = Sys.Date(), time = Sys.time(), val = 1) 

このように手動で簡単に日付の列を文字列に変換できます。

df$date <- as.character(df$date) 
df$time <- as.character(df$time) 

日付の列を1つ1つ指定することなく全体を変換できる方法はありますか? lapplyまたはsapplyを使ってどのように変換できますか?

+0

あなたは3つの日付列を持っていれば、3列すべてを一度に変換したいのですか?本当ですか? – Salman

+0

'df [] < - lapply(df、as.character)'を試してください。角括弧は 'df'の形を保つためのものです。 –

+0

はい、正確です。私は列を手動で指定せずにすべてを一度に変換したいと思います。 –

答えて

2

まず、より完全な例をいくつかのデータ型で作成します。次に、いずれかがクラスDateまたはPOSIXtであるかを決定します。最後に、興味のあるものだけを修正します。

df <- data.frame(date = Sys.Date(), time = Sys.time(), x = 1, A = "Test") 

inx <- sapply(df, function(x) inherits(x, "Date") || inherits(x, "POSIXt")) 
df[inx] <- lapply(df[inx], as.character) 
str(df) 
#'data.frame': 1 obs. of 4 variables: 
# $ date: chr "2017-11-05" 
# $ time: chr "2017-11-05 08:30:19" 
# $ x : num 1 
# $ A : Factor w/ 1 level "Test": 1 

などPOSIXctPOSIXlt両方として他の日付/時刻のクラスはクラスPOSIXtからそうあなただけのこの後者をテストする必要が継承することに注意してください。

+0

ありがとう!それは非常に有用です –

関連する問題