R 创建因子变量';周末';和';工作日';从日期开始

R 创建因子变量';周末';和';工作日';从日期开始,r,categorical-data,R,Categorical Data,我有以下数据帧。这只是一个开头,日期跨度为2个月。我的问题是如何在数据框中创建一个新的因子变量,该变量有两个级别,“weekday”和“weekend”,指示给定日期是工作日还是周末 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 201

我有以下数据帧。这只是一个开头,日期跨度为2个月。我的问题是如何在数据框中创建一个新的因子变量,该变量有两个级别,“weekday”和“weekend”,指示给定日期是工作日还是周末

    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

您可以使用
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]

使用软件包
chron
,并假设您的data.frame被称为
df

df$weekend = chron::is.weekend(df$date)
结果是一列布尔值,当日期在周末时为TRUE(在这里处理布尔值比处理字符串更好)

这是怎么回事:

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

activity$week我想使用base添加一个稍微高效的答案,并利用周六和周日都是唯一以“S”开头的日子这一事实:


df$Weekend@akrun:新用户至少需要15次重复才能接受answers@smci15代表是为了投票。谢谢阿克伦!它起作用了。我想如果(date==“Saturday”或date==“Sunday”){c(“weekend”)}或者{c(“weekend”)}但它不起作用,那么您的代码是干净且易于理解的。但是为什么在factor函数中使用+1L呢?我不明白。当我移除+1L时,它似乎不起作用@黄小立 <代码>(工作日(df1$date)%in%weekdays1)
返回一个逻辑向量。您可以在%weekdays1,‘weekday’、‘weekday’、‘weekday’、‘weekday’’中使用
ifelse(工作日(df1$date)%
或将
1
添加到逻辑向量,以强制逻辑向量为
FALSE、TRUE
的数值
。如果将级别指定为
c(FALSE,TRUE)
,即
factor((工作日(df1$date)%in%weekdays1),levels=c(FALSE,TRUE),labels=c('weekend','weekday'))
,则在不使用
+1L
的情况下,也应该可以工作。
谢谢akrun,我认为级别=c(FALSE,TRUE)更清晰。
activity$week <- ifelse(weekdays(activity$date) %in% c("Saturday", "Sunday"), "weekend", "weekday")