web-dev-qa-db-ja.com

R-日付と時刻のフィールドをHHMMSS形式のPOSIXctに変換する

したがって、3つの列を持つデータファイルがあります。

20010101 000000  0.833
20010101 000500  0.814
20010101 001000  0.794
20010101 001500  0.772
...

人間の目にはかなりはっきりしているように、最初の2つは日付と時刻です。私はそれらをPOSIXctに変換する必要があります(またはそれがより良い場合は何か他のものですが、Rでタイムスタンプを扱う私の限られた過去の経験はPOSIXctを使用することです)。通常、read.tableでプルしたので、次のように使用します。

df$DateTime <- as.POSIXct(paste(df$Date, df$Time), format="%Y%m%d %H%M%S")

ただし、2番目の列は(おそらく型強制によって?)先行するゼロが失われているように見えるため、正しく機能しません。

私は RのPOSIXctに対する整数としての日付と時間としての因子の組み合わせ日付と時刻のデータの2つの列を1つに変換する を見てきましたが、どちらも区切り文字付きの時間を使用しています:など、同じ問題はありません。

これらの列をPOSIXctに変換するにはどうすればよいですか?

12
Flyto

あなたはとても親しかった。次の「単純に」は、最初の2列を強制的に文字列として読み取るため、先行ゼロが保存されます。

R> df <- read.table(text="20010101 000000  0.833
20010101 000500  0.814
20010101 001000  0.794
20010101 001500  0.772", 
+ header=FALSE, colClasses=c("character", "character", "numeric"), 
+ col.names=c("Date", "Time", "Val"))
R> df
      Date   Time   Val
1 20010101 000000 0.833
2 20010101 000500 0.814
3 20010101 001000 0.794
4 20010101 001500 0.772

今あなたがしようとしていることは「うまくいく」:

R> df$DateTime <- as.POSIXct(paste(df$Date, df$Time), format="%Y%m%d %H%M%S")
R> df
      Date   Time   Val            DateTime
1 20010101 000000 0.833 2001-01-01 00:00:00
2 20010101 000500 0.814 2001-01-01 00:05:00
3 20010101 001000 0.794 2001-01-01 00:10:00
4 20010101 001500 0.772 2001-01-01 00:15:00
R> 
16

データを文字としてインポートするだけです:

txt <- "Date  Time  value
20010101 000000  0.833
20010101 000500  0.814
20010101 001000  0.794
20010101 001500  0.772
"

df <- read.table(text=txt, header=TRUE, 
                 colClasses=c("character", "character", "numeric"))

df$DateTime <- as.POSIXct(paste(df$Date, df$Time), format="%Y%m%d %H%M%S")
3
zelite

単にあなたは超すばらしくて速い潤滑油パッケージを使うことができます。あなたの目的のためにこれを試してください:

_df <- read.table(text="20010101 000000  0.833
20010101 000500  0.814
20010101 001000  0.794
20010101 001500  0.772", 
                  header=FALSE, colClasses=c("character", "character",     "numeric"), 
                  col.names=c("Date", "Time", "Val"))

df$mix <- paste(df$Date, df$Time)
df$mix <- parse_date_time(df$mix, 'Ymd HMS')
_

正しいフォーマットをそれにフィードする必要があるだけです。私は_as.POSICct_よりも柔軟性があり、時間変数を操作する他の関数があるので、これを優先します。

1
Miros