2017-04-18 5 views
2
に作成

私は以下のようなデータフレームを持っています。"Week_Start"変数をR

bus_date <- as.Date(c('2017-04-03', '2017-04-04', '2017-04-06', '2017-04-11', '2017-04-13', '2017-04-17')) 
sales <- c(100, 110, 120, 200, 300, 100) 


daily_sales <- data.frame(bus_date, sales) 

日常の販売台です。

営業週の日付である「Week_Start」という新しい変数を作成したいとします。私は週番号(1-52)を記録することができる様々なソリューションを実装しましたが、実際の週の開始日が必要です。

場合(bus_dateは月曜日です) リターン(bus_date) 他 リターン(月曜日bus_date前)

だから私の結果のデータフレームは、次のようになります。

Week_Start <- as.Date(c('2017-04-03', '2017-04-03', '2017-04-03', '2017-04-10', '2017-04-10', '2017-04-17')) 
daily_sales2 <- data.frame(bus_date, sales, Week_Start) 

私はおそらくそこにある知っていますこれを行う簡単な方法ですが、どこから始めたらよいかわかりません。ありがとう。

答えて

4

あなたはlubridateからfloor_dateでそれを行うことができる方法です。既定では、floor_dateは先週の日曜日を示します。 +1はあなたに月曜日を与えます。

library(lubridate) 
daily_sales$Week_Start <- floor_date(daily_sales$bus_date,unit="week")+1 
daily_sales 
    bus_date sales Week_Start 
1 2017-04-03 100 2017-04-03 
2 2017-04-04 110 2017-04-03 
3 2017-04-06 120 2017-04-03 
4 2017-04-11 200 2017-04-10 
5 2017-04-13 300 2017-04-10 
6 2017-04-17 100 2017-04-17 
+0

もう1つの優れた解決策です。私は算術的性質の柔軟性のためにこれを好む。私は前週や来週もこれを使うことができました。ありがとう。 – pyll

6

平日W%

?strptimeから10進数(0-6、日曜日が0です)。

%W月曜日を 曜日の第1曜日(通常は、第1週の 1とし、通常は第1月曜日)に10進数(00-53)で表示します。英国大会ここで

as.Date(format(daily_sales$bus_date, "%Y-%W-1"), format = "%Y-%W-%w") 
#[1] "2017-04-03" "2017-04-03" "2017-04-03" "2017-04-10" "2017-04-10" "2017-04-17"