日付に基づいてRでデータフレームをサブセット化する[終了]


8

非常にシンプルなログファイルのような構造のデータセットがあります。日付範囲に従ってデータをサブセット化したいのですが、1つのパラメーターでしか実行できません。

私のデータは次のようになります:

            date_time loc_id node  energy   kgco2 
1 2009-02-27 00:11:08     87  103 0.00000 0.00000 
2 2009-02-27 01:05:05     87  103 7.00000 3.75900 
3 2009-02-27 02:05:05     87  103 6.40039 3.43701 
4 2009-02-27 03:05:05     87  103 4.79883 2.57697 
5 2009-02-27 04:05:05     87  103 4.10156 2.20254 
6 2009-02-27 05:05:05     87  103 2.59961 1.39599

ファイルには1年分のデータが含まれています。毎月、おそらく1週間の要約プロットを作成します

次のようにdate_timeを処理しています。

> dt <-as.POSIXlt(ae$date_time)
> ae$dt <- dt
> names(ae$dt)
[1] "sec"   "min"   "hour"  "mday"  "mon"   "year"  "wday"  "yday"  "isdst"

今私はデータを次のようにサブセット化しようとしています:

> x <- ae$energy[ae$dt$year=="110" & ae$dt$mon=="10"]
> x
numeric(0)

「110」は次の理由によります。

> range(ae$dt$year)
[1] 109 110

私も運が悪いので以下を試しました:

> d <- subset(ae, (dt$year=="110" & dt$mon=="10"), select=energy)

ただし、これらは機能します:

> d <- subset(ae, dt$year=="110", select=energy)

これもそうです

> d <- subset(ae, dt$mon=="10", select=energy)

年と月の両方を選択してサブセット化する方法についてのアイデアはありますか?

おかげで、


2
POSIXltオブジェクトのコンポーネントは文字ではなく数値/整数であるため、コードは機能しません。しかし、シェーンが言ったように、あなたは本当に時系列クラスを使うべきです...
ジョシュア・ウルリッヒ

ええ、あなたが気づいたら、私はすでに数日前に解決策を投稿しました。
Gガルシア

回答:


6

わかりましたtimeseriesはトリックを行ったようです:

aets <- as.xts(read.zoo("n8_energy_actual2009_2010.csv", header=TRUE, sep=",", FUN=as.POSIXct))
eats.2010 <- aets["2010-01::2010-10"]

4

いくつかのポイント:

  1. それがなぜ起こっているのか私にはわかりません。明らかに、POSIXltスロットは間違っています。スロットを調整する必要がない限り、私は通常POSIXctを使用します。
  2. 1つのオプションは、日付を使用し、直接ではなく、スロットをいじり、と言うことです<=し、>=サブセットします。何かのようなものae[ae$date >= as.POSIXlt("2009-10-01") & ae$date < as.POSIXlt("2009-11-01"),]
  3. これはデータ構造の正確な目的であるため、時系列を使用することを検討する必要があります(また、時系列のデータを処理するための多くの便利な機能を提供します)。最も一般的なのはzooです。 xtsまた、この種のものを支援することができる多くの関数が含まれています。

Shane氏に感謝します。timeseriesを分析するための経験はありませんでした。簡単にdxts = as.xts(as.POSIXct(ae $ date_time))を試してみましたが、ポインタが運がなかったのですか?
Gガルシア、

+1を推奨しzooます。それはあなたの仕事をはるかに簡単にします。xts私はそれを直接使用しましたが、パッケージの実装者により多くのものを意味します。
ウェイン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.