-2

次のような日付形式があります。

        V1  V2   V3
1 20100420 915   120
2 20100420 920   150
3 20100420 925   270
4 20100420 1530  281

1行あたり3列、1行目は次のことを意味します:2010-04-20 09:15 120

今、私はそれを1列(時系列)に変更したいと思います:

                   V3
1 20100420 09:15   120
2 20100420 09:20   150
3 20100420 09:25   270
4 20100420 15:30   281

また:

                   V3
1 20100420 9:15    120
2 20100420 9:20    150
3 20100420 9:25    270
4 20100420 15:30   281

どうすればRでそれを達成できますか?

4

2 に答える 2

5

?strptimeそして?sprintfあなたの友達です:

データセットを再作成します。

test <- read.table(textConnection("V1  V2 V3
20100420 915 120
20100420 920 150
20100420 925 270"),header=TRUE)

貼り付けを行います。

strptime(
paste(
    test$V1,
    sprintf("%04d", test$V2),
    sep=""
),
format="%Y%m%d%H%M"
)

結果:

[1] "2010-04-20 09:15:00" "2010-04-20 09:20:00" "2010-04-20 09:25:00"
于 2012-07-30T06:45:40.630 に答える
3

まず、フォーマットを修正し、次のようなパッケージを使用しxtsて適切な時系列オブジェクトを取得します。

# Read in the data. In the future, use `dput` or something else
# so that others can read in the data in a more convenient way
temp = read.table(header=TRUE, text=" V1  V2   V3
1 20100420 915   120
2 20100420 920   150
3 20100420 925   270
4 20100420 1530  281")

# Get your date object and format it to a date/time object
date = paste0(temp[[1]], apply(temp[2], 1, function(x) sprintf("%04.f", x)))
date = strptime(date, format="%Y%m%d%H%M")

# Extract just the values
values = temp[[3]]

# Load the xts package and convert your dataset
require(xts)
xts(values, order.by=date)
#                     [,1]
# 2010-04-20 09:15:00  120
# 2010-04-20 09:20:00  150
# 2010-04-20 09:25:00  270
# 2010-04-20 15:30:00  281

日付変換:

  • apply(temp[2], 1, ...)temp の 2 列目に行ごとに移動し、数値を 4 桁に再フォーマットします。
  • 次に、paste0すべての日時情報を 1 つのベクトルに結合します。
  • 最後に、strptimeその文字ベクトルを適切な日時オブジェクトに変換します。

アップデート

もちろん、通常の だけが必要な場合はそれも可能ですが、リアルタイムの系列分析を行いたい場合はまたはdata.frameのようなものを使用することを強くお勧めします。zooxts

簡単なdata.frame手順は次のとおりです (前にdateおよびvaluesオブジェクトを作成した後に続きます)。

data.frame(V3 = values, row.names=date)
#                      V3
# 2010-04-20 09:15:00 120
# 2010-04-20 09:20:00 150
# 2010-04-20 09:25:00 270
# 2010-04-20 15:30:00 281
于 2012-07-30T06:52:09.757 に答える