วิเคราะห์อนุกรมเวลาใน R (พร้อมเวลา)

ฉันเป็นมือใหม่กับอาร์

ฉันมีชุดข้อมูล:

  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

และฉันต้องการสร้างชุดย่อยบางส่วน:

  1. ชุดย่อยที่กรองต่อเดือน (ดังนั้นข้อมูลทั้งหมดตั้งแต่ เช่น เมษายน)

  2. เซ็ตย่อยกรองต่อ dag (ดังนั้นข้อมูลทั้งหมดจากทุกวัน)

ฉันลองบางสิ่ง (ซึ่งไม่ได้ผล) และ Googled มากมาย:

  • energy <- filter(dataset, datetime == "2015-04") (ซึ่งทำให้ 'ไม่มีข้อมูล')
  • ฉันพบ 'วิธีแก้ปัญหา' นี้ (ค่าเฉลี่ยรายปี รายเดือน หรือรายวันสำหรับ อนุกรมเวลาไม่ปกติ) แต่ปัญหาคือฉันมี 60,700 รายการ.. ดังนั้นจึงควรจะดีถ้ากระบวนการนี้ดำเนินการโดยอัตโนมัติ
  • ฉันพบวิธีแก้ปัญหาอื่นๆ แต่ใช้เฉพาะวันที่เท่านั้น (ไม่มีเวลา) คุณสามารถลบเวลาได้เช่นกัน แต่จะอยู่ในคอลัมน์เดียวกับวันที่

ฉันหวังว่านี่จะไม่ซ้ำกัน เพราะแหล่งข้อมูลอื่นๆ จะไม่ช่วยอะไร หากมีอะไรไม่ชัดเจนโปรดแจ้งให้เราทราบ ฉันแค่เริ่มต้นด้วย R.


person Community    schedule 20.04.2016    source แหล่งที่มา
comment
ฉันทำสิ่งนี้: one$day ‹- weekdays(as.Date(one$datetime)) one$month ‹- month(as.Date(one$datetime))   -  person    schedule 20.04.2016
comment
ไม่เหมาะสม แต่ตอนนี้ฉันเห็นวันและเดือนแล้ว.. น่าเสียดายที่ไม่ใช่ทุกวันในเดือน แต่เห็นได้ทุกวันในหนึ่งสัปดาห์   -  person    schedule 20.04.2016


คำตอบ (2)


หากต้องการสับเซ็ตข้อมูลตามเดือน วัน หรือวันธรรมดา วิธีที่ดีที่สุดคือแปลงคอลัมน์ให้เป็นคลาสวันที่/เวลา สมมติว่าคุณอ่านข้อมูลของคุณลงใน dataframe (ชื่อ df) จากไฟล์ .csv ดังนั้น datetime เหล่านั้นมักจะเป็นสตริงอักขระ วิธีแปลงเป็นคลาสวันที่/เวลา:

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

เมื่อคอลัมน์อยู่ในคลาส POSIX คุณสามารถเซ็ตย่อยโดยใช้

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

ฉันขอแนะนำให้อ่านหน้าความช่วยเหลือและค้นคว้า POSIXct, POSIXlt, strptime, cut.POSIXt เป็นจุดเริ่มต้น
R อาจดูแปลกๆ เล็กน้อยเกี่ยวกับวันที่และเวลา แต่เมื่อคุณคุ้นเคยแล้ว มันเป็นฟังก์ชันที่ทรงพลังมาก

person Dave2e    schedule 20.04.2016

แปลง datetime ของคุณเป็นวันที่

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

(1) แทรกฟิลด์เดือนลงในชุดข้อมูลและชุดย่อยของคุณตามเดือน

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) แทรกฟิลด์ yymmdd รวมและเซ็ตย่อยตามวันที่ระบุ

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