2012-04-25 36 views
14

Tôi có data.frame sau trong R:mức yếu tố Sắp xếp lại theo ngày trong tuần vào R

> daily 
     DoW   Duration 
1 Friday 14.0000000000000 
2 Monday 21.0000000000000 
3 Saturday 12.0000000000000 
4 Thursday 28.0000000000000 
5 Tuesday 12.0000000000000 
6 Wednesday 91.0000000000000 
7 Sunday 20.0000000000000 

Tôi muốn thay đổi thứ tự của các cấp yếu tố để các tuần trong (US) thứ tự trong tuần.

Có vẻ như tôi có thể làm điều này theo cách chậm, khó hiểu với relevel(). Nhưng điều này chỉ mất 1 đối số dạng số và di chuyển nó lên đầu. Vì vậy, relevel(daily$DoW, 7), di chuyển Chủ nhật lên đầu, nhưng phần còn lại vẫn không có thứ tự (có nghĩa là tôi cần phải giải phóng nó theo thứ tự ngược lại).

Có thể thực hiện được, nhưng phải có cách tốt hơn, đúng không?

(. Giải pháp chuỗi thời gian cũng có thể chấp nhận)

Trả lời

18

Bạn cần phải xác định mức trong yếu tố và sau đó sử dụng order với lập chỉ mục:

daily$DoW <- factor(daily$DoW, levels= c("Sunday", "Monday", 
    "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday")) 

daily[order(daily$DoW), ] 
+3

Tôi đã kiểm tra xem liệu R có hằng số ngày trong tuần được tích hợp như trong tháng và có vẻ như không. Hình nó sẽ. –

+1

Điều này gần như đã làm việc --- Tôi đã thực hiện dòng cuối cùng là một nhiệm vụ, 'hàng ngày <- hàng ngày [trật tự (hàng ngày $ DoW),] 'Nhưng tôi nhận thấy rằng khi tôi tạo một biểu đồ từ nó với' ggplot (hàng ngày, aes (x = DoW, y = Thời lượng)) + geom_histogram() ', các yếu tố được liệt kê theo thứ tự đúng trên trục x, nhưng không phải trên trục y --- nghĩa là các giá trị y vẫn tương ứng với giá trị cũ vị trí của các giá trị x. tức là, chủ nhật là 14, thay vì 20. – Mittenchops

+0

Vâng, có lẽ nhiệm vụ của tôi là không chính xác, nhưng khi tôi chỉ cần gõ 'daily' bây giờ, chỉ số vẫn được liệt kê là '7,2,5,6,4,1,3' , mặc dù cột DoW hiện bắt đầu với Chủ Nhật. – Mittenchops

1

Thay vì một factor, những gì bạn muốn là một Ordered.Factor.

dòng mã này R chuyển biến DoW của bạn đến một "Yếu tố thứ tự":

daily$DoW <- ordered(daily$DoW, levels=c("Monday", "Tuesday", "Wednesday", "Thursday", 
"Friday", "Saturday", "Sunday")) 

Bây giờ khi bạn sử dụng table, plot hay bất kỳ chức năng khác trên Dow nó sẽ là thứ tự mà bạn đã nêu ở trên.

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