2011-01-26 36 views
5

Tôi có một khung dữ liệu với 2 cột, ngày chứa đầu tiên, và thứ hai có chứa lần, trong các định dạng:Đối phó với ngày tháng và thời gian trong R

 date   time   
[1,] "2003-10-03" "22:32:00" 
[2,] "2003-10-05" "17:43:06" 
[3,] "2003-10-10" "18:45:56" 
[4,] "2003-11-12" "17:07:16" 
[5,] "2003-11-13" "12:48:04" 
[6,] "2003-11-13" "18:17:57" 

Tôi muốn tạo ra một số biểu đồ của các dữ liệu xem số lượng sự kiện mỗi năm, mỗi tháng và vào một giờ cụ thể trong ngày.

Cho năm đó là dễ dàng

hist(as.Date(df[,1]), "years") 

Bây giờ, để có được số sự kiện mỗi tháng (không tính đến năm) tôi đã sử dụng:

months = c("January", "February", "March", 
      "April", "May", "June", "July", 
      "August", "September", "October", 
      "November", "December") 
tb <- table(factor(months.Date(dt), levels=months) 
barplot(tb) 

Câu hỏi:

  1. Is có cách nào tốt hơn để làm biểu đồ mỗi tháng?
  2. Làm cách nào để làm điều tương tự cho thời gian trong ngày (thùng hàng giờ là đủ)?

Cảm ơn

+4

Không cần phải ra khỏi danh sách các tên tháng - hãy nhớ rằng 'tháng. name' và 'month.abb' đã được tích hợp sẵn và sử dụng ngôn ngữ mặc định của hệ thống của bạn. –

+0

@jonw: tốt để biết, tôi không biết điều đó! – nico

Trả lời

6

Tôi sẽ sử dụng XTS, đặc biệt là nếu bạn có dữ liệu khác hơn là ngày tháng và thời gian trong data.frame của bạn.

df$count <- 1 
x <- xts(df$count,as.POSIXct(paste(df$date,df$time))) 

# create aggregates and plot with plot.zoo() 
plot.zoo(period.apply(x, endpoints(index(x),"years"), sum), type="h") 
plot.zoo(period.apply(x, endpoints(index(x),"quarters"), sum), type="h") 
plot.zoo(period.apply(x, endpoints(index(x),"months"), sum), type="h") 
plot.zoo(period.apply(x, endpoints(index(x),"weeks"), sum), type="h") 
plot.zoo(period.apply(x, endpoints(index(x),"days"), sum), type="h") 
plot.zoo(period.apply(x, endpoints(index(x),"hours"), sum), type="h") 
+0

có vẻ thú vị, tôi sẽ tham gia! – nico

4

Nếu bạn không nhớ nhãn là "01" thay vì "tháng một" bạn có thể làm một cái gì đó như thế này

barplot(table(format(df$date,"%m"))) 
+3

Ý tưởng hay. Lưu ý rằng '"% B "' cung cấp tên tháng đầy đủ và '"% b "' các từ viết tắt. Xem '? Strptime' cho tất cả các thông số chuyển đổi. –

+0

Vâng, tôi không quan tâm đến tên, tôi sẽ ẩn trục và viết lại chúng vì tôi không cần chúng bằng tiếng Anh :) – nico

+1

Tôi không thích ý tưởng của% B hoặc% b vì bạn mất tự nhiên đặt hàng của các tháng. – Dason

Các vấn đề liên quan