我正在尝试在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
.... .... ....
感谢您的帮助
答案 0 :(得分: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
,这意味着我们不需要手头有周末列表。
答案 1 :(得分:4)
DF$IsWeekend <- DF$date %in% weekend
然后,如果你真的喜欢0和1:
DF$IsWeekend <- as.numeric(DF$IsWeeekend)
答案 2 :(得分: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)]
然后使用trsanform
和ifelse
创建新列
transform(dat ,weekend = ifelse(date %in% as.Date(weekends,'%m/%d/%Y') ,1,0 ))