6

5 か月間、10 分間隔で測定された連続データの時系列があります。簡単にするために、データは次のように 2 つの列で使用できます。

タイムスタンプ温度差
2011 年 2 月 14 日 19:00 -0.385
2011 年 2 月 14 日 19:10 -0.535
2011 年 2 月 14 日 19:20 -0.484
2011 年 2 月 14 日 19:30 -0.409
2011 年 2 月 14 日 19:40 -0.385
2011 年 2 月 14 日 19:50 -0.215

...そして、それは次の5か月間続きます。を使用して Timestamp 列を解析しましたas.POSIXct

1 日の特定の時間帯 (正午から午後 3 時までなど) の行を選択したい場合、1 日の他の時間を除外したい場合、またはそれらの 3 時間を抽出するだけでデータ フローがシーケンシャルにある場合 (つまり、時系列で)。

4

2 に答える 2

6

あなたは基本的な考え方を知っているようですが、詳細が欠けているだけです。おっしゃるように、タイムスタンプをPOSIXオブジェクトに変換してからサブセット化します。

潤滑液

最も簡単な方法は、おそらく潤滑剤を使用することです。最初にパッケージをロードします。

library(lubridate)

次に、タイムスタンプを変換します。

##*m*onth *d*ay *y*ear _ *h*our *m*inute
d = mdy_hm(dd$Timestamp)

次に、必要なものを選択します。この場合、午後7時30分以降の日付が必要です(曜日に関係なく)。

dd[hour(d) == 19 & minute(d) > 30 | hour(d) >= 20,]

ベースRソリューション

最初に上限を作成します。

lower = strptime("2/14/2011 19:30","%m/%d/%Y %H:%M")

次に、POSIXオブジェクトのタイムスタンプを変換します。

d = strptime(dd$Timestamp, "%m/%d/%Y %H:%M")

最後に、データフレームのサブセット化について説明します。

dd[format(d,"%H:%M") > format(lower,"%H:%M"),]

この最後の部分をplannapusに感謝します


上記の例のデータ:

dd = read.table(textConnection('Timestamp Temp.Diff
"2/14/2011 19:00" -0.385
"2/14/2011 19:10" -0.535
"2/14/2011 19:20" -0.484
"2/14/2011 19:30" -0.409
"2/14/2011 19:40" -0.385
"2/14/2011 19:50" -0.215'), header=TRUE)
于 2012-10-15T08:31:27.763 に答える
2

xts パッケージの時間ベースのサブセット化を使用すると、これを簡単に行うことができます。data.frame の名前が次のようになっていると仮定しますData

library(xts)
x <- xts(Data$Temp.Diff, Data$Timestamp)
y <- x["T12:00/T15:00"]
# you need the leading zero if the hour is a single digit
z <- x["T09:00/T12:00"]
于 2012-10-15T11:42:19.460 に答える