4

週末の R のデータセットにダミー変数を作成しようとしています。つまり、その日が週末の場合は列の値が 1 になり、その日が平日の場合は値が 0 になります。

最初に、データセット全体を行ごとに反復処理し、日付が週末の場合は週末変数に 1 を割り当ててみました。しかし、これには 70,000 行があり、もっと簡単な方法があることを考えると、これには永遠に時間がかかります。

以下は、データフレームをどのように見せたいかです。今のところ週末コラム以外はこんな感じ。これが何かを変えるかどうかはわかりませんが、今のところ日付が要因です。週末に当たる日付のリストもあります。

weekend <- c("2/9/2013", "2/10/2013", "2/16/2013", "2/17/2013", ... , "3/2/2013")

date          hour          weekend
2/10/2013     0             1
2/11/2013     1             0
....          ....          ....

助けてくれてありがとう

4

3 に答える 3

5

実際には日付を中心に構築されたデータ構造と関数に依存する方が安全かもしれません。

dat <- read.table(text = "date          hour          weekend
+ 2/10/2013     0             1
+ 2/11/2013     1             0",header = TRUE,sep = "")
> weekdays(as.Date(as.character(dat$date),"%m/%d/%Y")) %in% c('Sunday','Saturday')
[1]  TRUE FALSE

これは基本的に SenorO の回答と同じ考え方ですが、日付を実際の日付列に変換してから を使用するだけですweekdays。つまり、週末のリストを手元に用意する必要はありません。

于 2013-06-05T17:14:12.593 に答える
4
DF$IsWeekend <- DF$date %in% weekend

次に、0 と 1 を本当に好む場合は、次のようにします。

DF$IsWeekend <- as.numeric(DF$IsWeeekend)    
于 2013-06-05T17:04:22.780 に答える
1

私の日付が本当に週末の日付であるかどうかを確認します。

weekends <- c("2/9/2013", "2/10/2013", "2/16/2013", "2/17/2013","3/2/2013")
weekends = weekends[ as.POSIXlt(as.Date(weekends,'%m/%d/%Y'))$wday %in% c(0,6)]

次に、を使用trsanformifelseて新しい列を作成します

transform(dat ,weekend = ifelse(date %in% as.Date(weekends,'%m/%d/%Y') ,1,0 ))
于 2013-06-05T17:15:17.580 に答える