创建因子变量&周末'和平日'从日期

时间:2015-03-06 06:04:39

标签: r categorical-data

我有以下数据框。这只是头部,日期跨越2个月。我的问题是如何在数据框中创建一个新的因子变量,有两个级别,“工作日”和“周末”,表明给定日期是工作日还是周末日?

    steps        date      interval
1 37.3826  2012-10-01             0
2 37.3826  2012-10-01             5
3 37.3826  2012-10-01            10
4 37.3826  2012-10-01            15
5 37.3826  2012-10-01            20
6 37.3826  2012-10-01            25

4 个答案:

答案 0 :(得分:9)

您可以使用base R

df1$date <- as.Date(df1$date)
#create a vector of weekdays
weekdays1 <- c('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday')
#Use `%in%` and `weekdays` to create a logical vector
#convert to `factor` and specify the `levels/labels`
df1$wDay <- factor((weekdays(df1$date) %in% weekdays1), 
         levels=c(FALSE, TRUE), labels=c('weekend', 'weekday') 
#Or
df1$wDay <- c('weekend', 'weekday')[(weekdays(df1$date) %in% weekdays1)+1L]
来自isWeekday

isWeekendtimeDate。我们可以使用weekdays参数指定wday。它返回一个逻辑向量,如果我们需要转换为可能的字符串,如上所示。

library(timeDate)
isWeekday(df1$date, wday=1:5)

答案 1 :(得分:2)

这个怎么样:

activity$week <- ifelse(weekdays(activity$date) %in% c("Saturday", "Sunday"), "weekend", "weekday")

答案 2 :(得分:1)

使用包chron,并假设您的data.frame被调用df

df$weekend = chron::is.weekend(df$date)

结果是一个布尔列,当日期是在周末时为TRUE(这里更好地操纵布尔值而不是字符串)

答案 3 :(得分:0)

只是想我会使用base添加一个稍微更有效的答案,并利用周六和周日是唯一一天以&#34; S&#34;

开头的事实:

df$Weekend <- grepl("S.+",weekdays(df$date))