したがって、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に変換するにはどうすればよいですか?
あなたはとても親しかった。次の「単純に」は、最初の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>
データを文字としてインポートするだけです:
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")
単にあなたは超すばらしくて速い潤滑油パッケージを使うことができます。あなたの目的のためにこれを試してください:
_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
_よりも柔軟性があり、時間変数を操作する他の関数があるので、これを優先します。