从日期创建因子变量 'weekend' 和 'weekday'
Creating factor variables 'weekend' and 'weekday' from date
我有以下数据框。这只是头部,日期跨越 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]
或 isWeekday
,isWeekend
来自 timeDate
。我们可以用 wday
参数指定 weekdays
。它 returns 一个逻辑向量,如果我们需要转换成字符串,可以像上面显示的那样。
library(timeDate)
isWeekday(df1$date, wday=1:5)
使用包 chron
,并假设您的 data.frame 被称为 df
:
df$weekend = chron::is.weekend(df$date)
结果是一列布尔值,当日期是周末时为 TRUE(在这里操作布尔值比操作字符串更好)
这个怎么样:
activity$week <- ifelse(weekdays(activity$date) %in% c("Saturday", "Sunday"), "weekend", "weekday")
只是想我会使用 base 添加一个稍微更有效的答案,并利用周六和周日都是唯一以 "S":
开头的事实
df$Weekend <- grepl("S.+",weekdays(df$date))
我有以下数据框。这只是头部,日期跨越 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]
或 isWeekday
,isWeekend
来自 timeDate
。我们可以用 wday
参数指定 weekdays
。它 returns 一个逻辑向量,如果我们需要转换成字符串,可以像上面显示的那样。
library(timeDate)
isWeekday(df1$date, wday=1:5)
使用包 chron
,并假设您的 data.frame 被称为 df
:
df$weekend = chron::is.weekend(df$date)
结果是一列布尔值,当日期是周末时为 TRUE(在这里操作布尔值比操作字符串更好)
这个怎么样:
activity$week <- ifelse(weekdays(activity$date) %in% c("Saturday", "Sunday"), "weekend", "weekday")
只是想我会使用 base 添加一个稍微更有效的答案,并利用周六和周日都是唯一以 "S":
开头的事实df$Weekend <- grepl("S.+",weekdays(df$date))