Berlangganan kerangka data dalam R berdasarkan tanggal [ditutup]

8

Saya memiliki dataset dengan struktur mirip logfile yang sangat sederhana, saya ingin mengelompokkan data menurut rentang tanggal tetapi hanya dapat dilakukan pada satu parameter.

data saya terlihat seperti ini:

            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

file termasuk data untuk setahun penuh, saya ingin membuat plot ringkasan untuk setiap bulan dan mungkin setiap minggu

Saya memproses date_time sebagai berikut:

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

sekarang saya mencoba untuk mengelompokkan data sebagai:

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

"110" adalah karena yang berikut:

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

Saya juga mencoba yang berikut ini tanpa hasil:

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

namun ini bekerja:

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

dan begitu juga ini

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

ada ide tentang bagaimana saya dapat mengatur ulang dengan memilih tahun dan bulan?

Terima kasih,

G Garcia
sumber
2
Kode Anda tidak berfungsi karena komponen objek POSIXlt adalah numerik / bilangan bulat, bukan karakter. Tetapi seperti yang dikatakan Shane, Anda harus menggunakan kelas deret waktu ...
Joshua Ulrich
ya, jika Anda perhatikan saya sudah memposting solusi di bawah ini beberapa hari yang lalu.
G Garcia

Jawaban:

6

ok timeseries tampaknya telah melakukan trik:

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

Beberapa poin:

  1. Saya tidak yakin mengapa itu terjadi. Jelas slot POSIXlt salah. Saya biasanya menggunakan POSIXct kecuali saya benar-benar harus menyesuaikan slot.
  2. Salah satu opsi adalah menggunakan tanggal secara langsung daripada mengacaukan slot, dan mengatakan <=dan >=untuk mengatur ulang. Sesuatu sepertiae[ae$date >= as.POSIXlt("2009-10-01") & ae$date < as.POSIXlt("2009-11-01"),]
  3. Anda harus mempertimbangkan untuk menggunakan rangkaian waktu untuk ini, karena itulah tujuan tepat dari struktur data tersebut (dan mereka menyediakan banyak fungsi yang berguna untuk menangani data dari waktu ke waktu). Salah satu yang paling umum adalah zoo. xtsjuga mencakup sejumlah fungsi yang dapat membantu dengan hal semacam ini.
Shane
sumber
Terima kasih Shane, saya belum punya esperience menganalisis jadwal waktu saya mencoba sebentar dxts = as.xts (as.POSIXct (ae $ date_time)) tetapi tidak beruntung petunjuk apa pun?
G Garcia
+1 untuk merekomendasikan zoo. Itu akan membuat tugas Anda jauh lebih mudah. xtslebih dimaksudkan untuk pelaksana paket, meskipun saya telah menggunakannya secara langsung.
Wayne