2011-11-06 27 views
8

Trong R, làm thế nào tôi có thể liên kết giữa một vectơ của ngày (ngày) và tuần?Làm cách nào để nhóm ngày thành tuần?

Chỉnh sửa: "tuần" phải là chỉ mục tuần trong phạm vi ngày chứ không phải trong năm. Lời xin lỗi của tôi cho sự mơ hồ.

+8

hãy xem gói 'lubridate' xử lý' ngày' rất dễ dàng. ví dụ 'week (x)' sẽ trả về số tuần của ngày x. – Ramnath

+3

-1 Chỉnh sửa - Vậy làm cách nào chúng tôi có thể biết bạn sở hữu chỉ mục tuần cá nhân là gì nếu bạn không i) cho chúng tôi biết trước đó và ii) ** hiển thị ** dữ liệu của bạn hoặc đoạn trích của nó? –

+0

@ GavinSimpson- bạn nói đúng. Tôi nên rõ ràng hơn. – JohnRos

Trả lời

15

Bạn có muốn số lần hoàn thành 7 ngày kể từ lần ghi đầu tiên không?

dvec <- as.Date("2001-04-01")+0:90 
dweek <- as.numeric(dvec-dvec[1]) %/% 7 
dweek[1:21] 
# [1] 0 0 0 0 0 0 0 1 1 1 1 1 1 1 2 2 2 2 2 2 2 
+1

+1 cho khoản khấu trừ –

+0

@GavinSimpson: Tôi "+() - ed" của bạn cũng vì đó là nỗ lực của bạn cung cấp cơ sở để khấu trừ. (Tôi bây giờ có được một popup "Gavin Simpson" khi tôi gõ "@Gavin". Gọn gàng.) –

+1

Và bạn đã có để yêu các chức năng phân chia số nguyên '% /%' - Tôi muốn cung cấp cho một +1 cho rằng nếu Tôi có thể - Câu trả lời thực sự rất gọn gàng và ngắn gọn. –

8

strftime là bạn của bạn ...

? strftime # to see the help and the format 

set.seed(1) 
dates <- Sys.Date() + sample(1:365, size = 10) 

R> dates 
[1] "2012-02-11" "2012-03-21" "2012-06-01" "2012-09-30" 
[5] "2012-01-18" "2012-09-25" "2012-10-11" "2012-06-30" 
[9] "2012-06-18" "2011-11-28" 

# %j for julian day - number of the day since the 1st of january each year 

R> strftime(dates, format = "%j") # or format(dates, format = "%j") 
[1] "042" "081" "153" "274" "018" "269" "285" "182" "170" "332" 

R> strftime(dates, format = "%w") 
[1] "6" "3" "5" "0" "3" "2" "4" "6" "1" "1" 

# my locale is in French so... 
R> strftime(dates, format = "%A") 
[1] "samedi" "mercredi" "vendredi" "dimanche" "mercredi" 
[6] "mardi" "jeudi" "samedi" "lundi" "lundi" 

Bằng cách làm những gì bạn có nghĩa là bởi ngày, ngày trong tháng, tuần hoặc năm?

20

Đối với mỗi ngày, nhận được tuần trong năm của nó bằng cách định dạng nó qua format() bằng cách sử dụng %U của %W trình giữ chỗ định dạng. %U coi ngày chủ nhật là ngày đầu tiên của tuần, trong khi %W coi thứ Hai là ngày đầu tiên trong tuần. Dưới đây là một ví dụ:

now <- as.Date(Sys.time()) 
dates <- seq(now, now + 25, by = "1 day") 

dat <- data.frame(Dates = dates, Week = format(dates, format = "%W")) 
head(dat, 10) 

Mà cho:

> head(dat, 10) 
     Dates Week 
1 2011-11-06 44 
2 2011-11-07 45 
3 2011-11-08 45 
4 2011-11-09 45 
5 2011-11-10 45 
6 2011-11-11 45 
7 2011-11-12 45 
8 2011-11-13 45 
9 2011-11-14 46 
10 2011-11-15 46 

Mặc dù nó không rõ ràng từ câu hỏi của bạn chính xác những gì bạn muốn làm, một cách để phù hợp với vector này ngày (tốt, khung dữ liệu của tôi dat ở trên) là qua merge(). Nói chúng tôi có một vector của tuần chúng tôi muốn để phù hợp chống lại và một số dữ liệu liên quan trong khung dữ liệu weekdat:

weekdat <- data.frame(Week = 44:50, Price = c(10, 20, 25, 30, 20, 15, 10)) 

Sau đó chúng ta có thể liên kết dat với weekdat sử dụng merge() như vậy:

> merge(dat, weekdat) 
    Week  Dates Price 
1 44 2011-11-06 10 
2 45 2011-11-07 20 
3 45 2011-11-08 20 
4 45 2011-11-09 20 
5 45 2011-11-10 20 
6 45 2011-11-11 20 
7 45 2011-11-12 20 
8 45 2011-11-13 20 
9 46 2011-11-14 25 
10 46 2011-11-15 25 
11 46 2011-11-16 25 
12 46 2011-11-17 25 
13 46 2011-11-18 25 
14 46 2011-11-19 25 
15 46 2011-11-20 25 
16 47 2011-11-21 30 
17 47 2011-11-22 30 
18 47 2011-11-23 30 
19 47 2011-11-24 30 
20 47 2011-11-25 30 
21 47 2011-11-26 30 
22 47 2011-11-27 30 
23 48 2011-11-28 20 
24 48 2011-11-29 20 
25 48 2011-11-30 20 
26 48 2011-12-01 20 

Có khác cách kết hợp hoặc liên kết ngày với tuần, nhưng ở trên sẽ cung cấp cho bạn một cái gì đó để làm việc.

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