Đặt lại khung dữ liệu trong R dựa trên ngày [đã đóng]


8

Tôi có một tập dữ liệu với cấu trúc giống như logfile, tôi muốn tập hợp dữ liệu theo phạm vi ngày nhưng chỉ có thể thực hiện trên một tham số.

dữ liệu của tôi trông như thế này:

            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

tệp bao gồm dữ liệu cho cả năm, tôi muốn tạo các ô tóm tắt cho mỗi tháng và có lẽ cả tuần

Tôi đang xử lý date_time như sau:

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

bây giờ tôi đang cố gắng tập hợp dữ liệu dưới dạng:

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

"110" là vì những điều sau đây:

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

Tôi cũng đã thử những điều sau đây không có may mắn:

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

tuy nhiên những công việc này:

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

và điều này cũng vậy

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

bất kỳ ý tưởng về làm thế nào tôi có thể tập hợp con bằng cách chọn cả năm và tháng?

Cảm ơn,


2
Mã của bạn không hoạt động vì các thành phần của đối tượng POSIXlt là số / số nguyên, không phải ký tự. Nhưng như Shane đã nói, bạn thực sự nên sử dụng một lớp chuỗi thời gian ...
Joshua Ulrich

vâng, nếu bạn nhận thấy tôi đã đăng giải pháp bên dưới vài ngày trước.
G Garcia

Câu trả lời:


6

thời gian ok dường như đã thực hiện các mẹo:

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

4

Một vài điểm:

  1. Tôi không chắc tại sao điều đó xảy ra. Rõ ràng các khe POSIXlt là sai. Tôi thường sử dụng POSIXct trừ khi tôi thực sự cần điều chỉnh các vị trí.
  2. Một tùy chọn là sử dụng ngày trực tiếp thay vì làm rối với các vị trí, và nói <=>=để tập hợp con. Cái gì đó nhưae[ae$date >= as.POSIXlt("2009-10-01") & ae$date < as.POSIXlt("2009-11-01"),]
  3. Bạn nên cân nhắc sử dụng chuỗi thời gian cho việc này, vì đó là mục đích chính xác của cấu trúc dữ liệu đó (và chúng cung cấp nhiều chức năng hữu ích để xử lý dữ liệu theo thời gian). Một trong những phổ biến nhất là zoo. xtscũng bao gồm một số chức năng có thể giúp với loại điều này.

Cảm ơn Shane, tôi chưa có bất kỳ phân tích thời gian tuyệt vời nào, tôi đã thử ngắn gọn dxts = as.xts (as.POSIXct (ae $ date_time)) nhưng không gặp may mắn nào?
G Garcia

+1 để giới thiệu zoo. Nó sẽ làm cho nhiệm vụ của bạn dễ dàng hơn nhiều. xtscó nghĩa là nhiều hơn cho người thực hiện gói, mặc dù tôi đã sử dụng nó trực tiếp.
Wayne
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.