3

ミリ秒を含む日付と時刻のフォーマットにミリ秒を組み込むことに問題があります。

説明: csv の日付形式は、最初の 3 列 2014/12/22,14:48:51,800 にそれぞれ日付、時刻、およびミリ秒として分散されます。したがって、基本的にそれらを1にマージします。ここでは、説明のためにデータフレームの1行を取得しました

temp
#[1] "2014/12/22" "14:48:51"   "800" 

temp <- gsub("/","-",paste(temp[1],paste(temp[2],temp[3],sep="."),sep=" "))
#[1] "2014-12-22 14:48:51.800" 

次に、オプションを設定します

op <- options(digits.secs = 3)
options(op)
Date_time <- as.POSIXlt(strptime(temp, format="%Y-%m-%d %H:%M:%OS"))
#[1] "2014-12-22 14:48:51.8 IST"

上記の出力は、 "2014-12-22 15:10:41.8 IST" になります。ただし、ミリ秒 8 および 80 についても、同じ出力「2014-12-22 15:10:41.8 IST」が得られます。

また、 format="%Y-%m-%d %H:%M:%OS3" を使用すると NA になります。

4

1 に答える 1

1

を使用sprintfして「ミリ秒」列の形式を変更する方が簡単なので、列を一緒に貼り付けることができますsprintf。次に、で日時クラスに変換しstrptimeます。

op <- options(digits.secs = 3)
strptime(sprintf("%s %s.%03d", temp[,1], temp[,2], 
          temp[,3]), format = '%Y/%m/%d %H:%M:%OS')
#[1] "2014-12-22 14:48:51.800 IST" "2014-12-22 14:48:51.008 IST" 
#[3] "2014-12-22 14:48:51.080 IST"

データ

temp <- structure(list(date = c("2014/12/22", "2014/12/22",
    "2014/12/22"), time = c("14:48:51", "14:48:51", "14:48:51"),
   millisec = c(800L, 8L, 80L)), .Names = c("date", 
  "time", "millisec"), class = "data.frame", row.names = c(NA, -3L))
于 2016-02-07T15:56:00.057 に答える