Analisis deret waktu dalam R (dengan waktu)

Saya seorang pemula dengan R.

Saya memiliki kumpulan data:

  meter    measurement    datetime                value
1 tv       EnergyUsed     2015-04-27  12:29:48    0.0
2 tv       EnergyUsed     2015-04-27  12:29:48    0.0
3 tv       EnergyUsed     2015-04-27  12:31:48    0.0
4 tv       EnergyUsed     2015-04-27  12:41:48    0.0
5 tv       EnergyUsed     2015-04-27  13:01:48    0.0

Dan saya ingin membuat beberapa subset:

  1. Subkumpulan difilter per bulan (Jadi semua data dari misalnya April)

  2. Subset difilter per hari (Jadi semua data dari setiap hari)

Saya mencoba beberapa hal (tidak berhasil) dan banyak mencari di Google:

  • energy <- filter(dataset, datetime == "2015-04") (yang mengarah ke 'tidak ada data')
  • Saya menemukan 'solusi' ini (Rata-rata tahunan, bulanan, atau harian untuk deret waktu tidak teratur) Tapi masalahnya saya punya 60.700 entri.. jadi alangkah baiknya jika proses ini dilakukan secara otomatis
  • Saya menemukan beberapa solusi lain, tetapi hanya menggunakan tanggal (tidak ada waktu). Menghapus waktu juga boleh, tetapi berada dalam satu kolom dengan tanggal.

Saya harap ini bukan duplikat, karena sumber lain tidak akan membantu. Jika ada sesuatu yang tidak jelas, tolong beri tahu saya. Saya baru mulai dengan R.


person Community    schedule 20.04.2016    source sumber
comment
Saya melakukan ini: one$day ‹- weekdays(as.Date(one$datetime)) one$month ‹- moon(as.Date(one$datetime))   -  person    schedule 20.04.2016
comment
Kurang maksimal, tapi sekarang saya bisa melihat hari & bulan.. sayangnya tidak setiap hari dalam sebulan, tapi hanya setiap hari dalam seminggu   -  person    schedule 20.04.2016


Jawaban (2)


Untuk mengelompokkan data Anda berdasarkan bulan, hari, atau hari kerja, yang terbaik adalah mengonversi kolom menjadi kelas tanggal/waktu. Dengan asumsi Anda membaca data Anda ke dalam kerangka data (bernama df) dari file .csv, maka waktu dan waktu kemungkinan besar adalah string karakter. Untuk mengonversi ke kelas tanggal/waktu:

df$datetime <- as.POSIXct(df$datetime, format="%Y-%m-%d %H:%M:%S")

Setelah kolom berada di kelas POSIX, Anda dapat membuat subset menggunakan

months(df$datetime)
weekdays(df$datetime)

Saya sarankan untuk membaca halaman bantuan dan meneliti POSIXct, POSIXlt, strptime, cut.POSIXt sebagai permulaan.
R mungkin tampak agak aneh mengenai tanggal dan waktu, tetapi setelah Anda terbiasa, ini adalah fungsi yang sangat kuat.

person Dave2e    schedule 20.04.2016

Ubah waktu tanggal Anda menjadi tanggal

(x<-as.Date(dat$datetime))
[1] "2015-04-27" "2015-04-27" "2015-04-27" "2015-04-27" "2015-04-27"

(1) Masukkan bidang bulan ke dalam kumpulan data Anda dan subkumpulan berdasarkan bulan

dat$mm <- format(x, "%m")
subset(dat, mm=="04")
  meter measurement            datetime value   yyyymmdd mm
1    tv  EnergyUsed 2015-04-27 12:29:48     0 2015-04-27 04
2    tv  EnergyUsed 2015-04-27 12:29:48     0 2015-04-27 04
3    tv  EnergyUsed 2015-04-27 12:31:48     0 2015-04-27 04
4    tv  EnergyUsed 2015-04-27 12:41:48     0 2015-04-27 04
5    tv  EnergyUsed 2015-04-27 13:01:48     0 2015-04-27 04

(2) Masukkan gabungan kolom yymmdd dan subset berdasarkan hari tertentu

dat$day <- format(x, "%y%m%d")
subset(dat, day=="150427")

  meter measurement            datetime value   yyyymmdd mm    day
1    tv  EnergyUsed 2015-04-27 12:29:48     0 2015-04-27 04 150427
2    tv  EnergyUsed 2015-04-27 12:29:48     0 2015-04-27 04 150427
3    tv  EnergyUsed 2015-04-27 12:31:48     0 2015-04-27 04 150427
4    tv  EnergyUsed 2015-04-27 12:41:48     0 2015-04-27 04 150427
5    tv  EnergyUsed 2015-04-27 13:01:48     0 2015-04-27 04 150427
person Adam Quek    schedule 20.04.2016