に文字として格納された日時列がありdata.table
ます。POSIXct に変換してから日付のみに丸めようとすると、奇妙な結果が得られます。
library(data.table)
library(lubridate)
# suppose I have these dates, in a data.table
date_chr <- c("2014-04-09 8:37 AM", "2014-09-16 6:04 PM",
"2014-09-30 3:26 PM", "2014-11-13 12:47 PM",
"2014-11-05 12:25 PM")
dat <- data.table(date_chr)
# I convert to POSIXct...
dat[, my_date := ymd_hm(date_chr)]
# ...and I want to round to date only, but this doesn't work
dat[, date_only := round(my_date, 'days')] # why does this return a list?
dat[, date_only := trunc(my_date, 'days')] # this too
class(dat$date_only)
でlist
、この警告メッセージが表示されます
# Warning message:
# In `[.data.table`(dat, , `:=`(date_only, round(my_date, "days"))) :
# Supplied 9 items to be assigned to 5 items of column 'date_only' (4 unused)
その間、これはうまくいきます!
dat_df <- data.frame(date_chr, stringsAsFactors = F)
dat_df$my_date <- ymd_hm(dat_df$date_chr)
dat_df$date_only <- round(dat_df$my_date, 'days')
class(dat_df$date_only)
はPOSIXlt, POSIXt
、お好みで。
私の質問は、これはなぜですか、使用時に問題を回避するにはどうすればよいdata.table
ですか? date_chr
変換前に時間部分を切り捨てるなどの回避策がありますが、うまくいくround.POSIXt()
はずです。
ご意見ありがとうございます。