2017-02-23 1 views
0

私はデータフレーム、datesを持っています。これには日付のリストが含まれています。私はリストの1つのプロット、dates$t2を作成しようとしています。 (すなわち、連続した週のうちどれくらいの日があるか)。週の日付のリストをビンに入れ、毎週のカウントのヒストグラムをプロットする

各ビンに分けられた週には、 11月1日、8月11日、...、リスト内の「最小」および「最大」(最も早い日付および最新の)日付に限定された範囲である。

これまでのところ、私はビン、data$t2、および列のシリーズにしたい日付のリストとデータフレームを作成している私は私のX-ラベルを作成する必要があります(私は仮定を!):

library(lubridate) 

dates$t1 <- c("24/07/2015", "12/08/2015", "10/08/2015", "05/09/2015", "20/09/2015", 
"23/09/2015", "07/09/2015", "04/11/2015", "03/11/2015", "14/10/2015", 
"08/10/2015", "14/09/2015", "02/10/2015", "28/09/2015", "23/10/2015", 
"02/11/2015", "28/11/2015", "06/12/2015", "10/12/2015", "08/12/2015", 
"07/12/2015", "03/12/2015", "21/11/2015", "02/12/2015", "12/12/2015", 
"28/12/2015", "13/01/2016", "14/01/2016", "03/01/2016", "24/01/2016" 
) 

dates$t1 <- dmy(dates$t1) 
dates$t2 <- dates$t1 + years(1) 
dates$day = day(dates$t2) 
dates$week = isoweek(dates$t2) 
dates$month = month(dates$t2, label = TRUE) 
dates$year = year(dates$t2) 

dates <- na.omit(dates) 

これまでのところ、とても良いと思います。データフレームは次のようになります。

> head(dates) 
      t1   t2 day week month year 
1 2015-07-24 2016-07-24 24 29 Jul 2016 
2 2015-08-12 2016-08-12 12 32 Aug 2016 
3 2015-08-10 2016-08-10 10 32 Aug 2016 
4 2015-09-05 2016-09-05 5 36 Sep 2016 
5 2015-09-20 2016-09-20 20 38 Sep 2016 
6 2015-09-23 2016-09-23 23 38 Sep 2016 

> str(dates) 
'data.frame': 30 obs. of 6 variables: 
$ t1 : Date, format: "2015-07-24" "2015-08-12" "2015-08-10" "2015-09-05" ... 
$ t2 : Date, format: "2016-07-24" "2016-08-12" "2016-08-10" "2016-09-05" ... 
$ day : int 24 12 10 5 20 23 7 4 3 14 ... 
$ week : int 29 32 32 36 38 38 36 44 44 41 ... 
$ month: Ord.factor w/ 12 levels "Jan"<"Feb"<"Mar"<..: 7 8 8 9 9 9 9 11 11 10 ... 
$ year : num 2016 2016 2016 2016 2016 ... 
- attr(*, "na.action")=Class 'omit' Named int [1:18] 30 32 33 34 35 36 37 38 39 40 ... 
    .. ..- attr(*, "names")= chr [1:18] "30" "32" "33" "34" ... 

ビニングとプロットについては、私は固執しています。私はこの時点でこだわっている:

ggplot(dates, aes(x = week)) + 
    geom_bar() 

はどのように助言することができ、誰です:

  1. は日 - 月(例えば01-11月)の形式で、x軸上の週番号を交換してください?
  2. 週番号が2つの異なる年にまたがることをggplotに伝えます。 1-10は、2016年の始めに現在表示されていない2017年の初めに属しています。
  3. x軸の制限を、リスト内の最も古い日付と最新の日付の範囲に設定します。

私はまだRに非常に新しいです、どんな助けもありがとう!

答えて

0

あなたは、各年の各週の最初の日付を含む週のカレンダーを作ることができます:あなたはあなたのdata.frame

dates <- merge(dates,week_calendar) 

をしてそして、あなたはプロットすることができた後、それをマージ

library(dplyr) 
data.frame(date=seq(as.Date("2015/1/1"), as.Date("2016/12/31"), by="day")) %>% 
    mutate(week=isoweek(date),year=year(date)) %>% 
    group_by(year,week) %>% 
    summarise(weekdate=min(date)) -> week_calendar 

library(ggplot2) 
ggplot(dates, aes(x = weekdate)) + 
    geom_bar()+ 
    scale_x_date(date_breaks = "1 week", date_labels = "%d-%b")+ 
    theme(axis.text.x = element_text(angle = 90)) 
+0

ありがとう、ありがとう@HubertL! (Rの新しい混乱したフォークのために)ggplotに次の行を追加して、x-ラベルが重複して判読不可能な場合に回転させることができます: '+ theme(axis.text.x = element_text(angle = 90)) ' – monkeytennis

+0

追加、thx @monkeytennis – HubertL

関連する問題