37

ArcGIS で Excel テーブルを xy ポイントとしてインポートすると、各ポイントの正しい DateTime スタンプが引き続き失われます。したがって、DateTime シリアル番号をフォーマットし、.shp を作成し、readOGR() を使用して .shp を R に読み込みました。

as.Date()RI に入ると、引数を使用して正しい日付に変換できますorigin = "1899-12-30"が、時刻は省略されます。唯一の Date を使用した例は見たことがありますが、DateTime を使用した実際の例は見たことがありません。私はas.Date()同様に使用していますas.POSIXct()が、この一見単純なタスクは少しイライラしていたので、投稿…</p>

正しい DateTime 形式の 10 行と Excel のシリアル番号を含むサンプル データ セットを作成しました。

*初期の障害に鋭い目を向けてくれた Richard と thelatemail に感謝します。データを修正し、ここに再投稿しました。

ここに私のサンプルデータがあります

helpData <- structure(list(ID = 1:10, DateTime = structure(c(9L, 1L, 2L, 
3L, 4L, 5L, 6L, 7L, 8L, 8L), .Label = c("3/11/2011 7:55", "3/13/2011 7:55", 
"3/14/2011 0:00", "3/14/2011 10:04", "3/14/2011 7:55", "3/15/2011 19:55", 
"3/17/2011 7:55", "3/18/2011 4:04", "3/4/2011 6:00"), class = "factor"), 
ExcelNum = c(40606.25, 40613.32986, 40615.32986, 40616, 40616.41944, 
40616.32986, 40617.82986, 40619.32986, 40620.16944, 40620.16944
)), .Names = c("ID", "DateTime", "ExcelNum"), class = "data.frame", row.names = c(NA, 
-10L))

head(helpData)

DateTime は GMT です。時刻は 24 時間制です (つまり、AM/PM ではありません)。私は Windows 7 で作業しており、最新の R と ArcGIS 10 を使用しています。

以下のコードは正しい日付を取得しますが、時刻はまだありません。

newDateTime <- as.Date(helpData[ , "ExcelNum"], origin = "1899-12-30")
head(newDateTime)

前もって感謝します!

4

5 に答える 5

55

あなたの数字は日数を数えています。秒に変換すると、すべて設定されます(丸め誤差が少なくなります)

helpData[["ExcelDate"]] <- 
  as.POSIXct(helpData[["ExcelNum"]] * (60*60*24)
    , origin="1899-12-30"
    , tz="GMT")


#     ID        DateTime ExcelNum           ExcelDate
#  1   1   3/4/2011 6:00 40606.25 2011-03-04 06:00:00
#  2   2  3/11/2011 7:55 40613.33 2011-03-11 07:54:59
#  3   3  3/13/2011 7:55 40615.33 2011-03-13 07:54:59
#  4   4  3/14/2011 0:00 40616.00 2011-03-14 00:00:00
#  5   5 3/14/2011 10:04 40616.42 2011-03-14 10:03:59
#  6   6  3/14/2011 7:55 40616.33 2011-03-14 07:54:59
#  7   7 3/15/2011 19:55 40617.83 2011-03-15 19:54:59
#  8   8  3/17/2011 7:55 40619.33 2011-03-17 07:54:59
#  9   9  3/18/2011 4:04 40620.17 2011-03-18 04:03:59
#  10 10  3/18/2011 4:04 40620.17 2011-03-18 04:03:59
于 2013-10-04T04:19:00.310 に答える
13

時間データはまだそこにありますが、表示されていないだけです - 以下を参照してください:

as.numeric(newDateTime)
#[1] 15037.25 15044.33 15046.33 15047.00 etc etc

日の一部を操作したい場合は、おそらくPOSIXct表現を使用するのが最適です。これを行うには、Dateに変換してから に変換できますが、列POSIXctと直接比較する場合は、タイムゾーンの問題が発生しますDateTime

helpData$newDate <- as.POSIXct(as.Date(helpData$ExcelNum,origin="1899-12-30"))
attr(helpData$newDate,"tzone") <- "UTC"
helpData

#   ID        DateTime ExcelNum             newDate
#1   1   3/4/2011 6:00 40606.25 2011-03-04 06:00:00
#2   2  3/11/2011 7:55 40613.33 2011-03-11 07:54:59
#3   3  3/13/2011 7:55 40615.33 2011-03-13 07:54:59
#4   4  3/14/2011 0:00 40616.00 2011-03-14 00:00:00
#5   5 3/14/2011 10:04 40616.42 2011-03-14 10:03:59
#6   6  3/14/2011 7:55 40616.33 2011-03-14 07:54:59
#7   7 3/15/2011 19:55 40617.83 2011-03-15 19:54:59
#8   8  3/17/2011 7:55 40619.33 2011-03-17 07:54:59
#9   9  3/18/2011 4:04 40620.17 2011-03-18 04:03:59
#10 10  3/18/2011 4:04 40620.17 2011-03-18 04:03:59
于 2013-10-04T04:41:31.170 に答える