1

現在、split.xtsをの形式で使用してsplit(xts.obj,'days')日中データのリストを作成しているため、リストの各要素は1日を表します。これにより、1日が午前0時から翌日の午前0時までに分割されます。たとえば、午前9時から翌日の午前8時59分59秒までなど、任意の時間にデータをリストに分割する方法はありますか。

これはかなり一般的な質問ですが、サンプルデータが必要な場合は...ここにあります...以下は、深夜に発生する分割についての私のポイントを示しています。

require(xts)
x <- xts(rnorm(1000000),Sys.time()-1000000:1)
x1 <- split(x,'days')
head(x1[[2]])

編集:

解決策は、この質問への回答として作成されたものと非常に似ています... Rのxtsを介して、詳細なデータから日+0から日+1のインデックス時間を抽出/サブセット化するにはどうすればよいですか?、しかしそれを行うより直接的な方法があればそれはありがたいです...

4

2 に答える 2

2

これにより、時間のベクトルが作成されます(GMT 9AMの場合)。

as.POSIXct(as.Date( seq(range(index(x))[1], range(index(x))[2], by="days") )) + 60*60*9
cts <- .Last.value
xp9 <- split(x, cut(index(x), cts) )
str(xp9)
#List of 11
于 2012-10-05T06:32:21.590 に答える
0

これは他の質問(?)と同じですが、同じ解決策が考えられます。

library(xts)
set.seed(42)
x <- xts(rnorm(1000000), as.POSIXct('2012-10-07') - (1000000:1) )

index(x) = index(x) - (9*3600)
x1 <- lapply ( split(x,'days'), function(one_day){ index(one_day) = index(one_day) + 9*3600; one_day } )
index(x) = index(x) + (9*3600)

これがxです:

2012-09-25 10:13:20  1.3709584
2012-09-25 10:13:21 -0.5646982
2012-09-25 10:13:22  0.3631284
...
2012-10-06 23:59:57  0.7505021
2012-10-06 23:59:58 -0.4726833
2012-10-06 23:59:59  1.1356617

x1[ 1 ]は次のとおりです。

2012-09-25 10:13:20  1.3709584
2012-09-25 10:13:21 -0.5646982
2012-09-25 10:13:22  0.3631284
...
2012-09-26 08:59:57 -0.7079315
2012-09-26 08:59:58 -0.2135840
2012-09-26 08:59:59 -1.8307128

x1 [[2]]:

2012-09-26 09:00:00  2.3205603
2012-09-26 09:00:01  1.8911404
2012-09-26 09:00:02 -0.8547244
...
2012-09-27 08:59:57 -0.5731661
2012-09-27 08:59:58 -1.5224021
2012-09-27 08:59:59 -0.5316183

そしてx1[[12]]:

2012-10-06 09:00:03  0.9222899
2012-10-06 09:00:04 -0.2010127
2012-10-06 09:00:05 -1.8403161
...
2012-10-06 23:59:54 -0.5931701
2012-10-06 23:59:55 -1.1656284
2012-10-06 23:59:56  0.7000441

別のアプローチが必要な場合は、タイムゾーンを変更することもできます。

Sys.setenv(TZ = "UTC")
library(xts)
set.seed(42)
x <- xts(rnorm(1000000), as.POSIXct('2012-10-07') - (1000000:1) )
indexTZ(x) = 'UTC+9'
x1 <- lapply ( split(x,'days'), function(one_day){ indexTZ(one_day) = 'UTC'; one_day } )

午前9時の休憩が実際に夏の午前8時である場合は、タイムゾーンアプローチを使用する必要があります。これは、Rが夏の調整を自動的に行うためです。そうでない場合は、前のアプローチを使用します。次に、私が意味することを正確に説明し、タイムゾーンデータベースのバグに対して脆弱ではありません。(TZデータベースはWindowsでも異なる動作をする可能性があると思います...私はまだそれをテストする機会がありませんでした。)

于 2012-10-07T02:19:37.970 に答える