r - 如何标记上周五或最后一天或上个月

标签 r date

我有一个日期和星期几的数据框

> head(data)
         day   weekday
1 2016-01-01    Friday
4 2016-01-04    Monday
5 2016-01-05   Tuesday
6 2016-01-06 Wednesday
7 2016-01-07  Thursday
8 2016-01-08    Friday

这是代码:

data <- data.frame(day = seq(as.Date("2014-01-01"), as.Date("2016-05-10"), "day"), 
                  weekday = weekdays(seq(as.Date("2014-01-01"), as.Date("2016-05-10"), 
                                         "day")))
excludeDays <- c("Saturday", "Sunday")
data <- subset(data, !weekdays(data$day) %in% excludeDays) #exclude weekend

我想添加两列来标记每个月的最后一个星期五和该月的最后一天,无论它是哪一天。你会怎么做?

更具体地说: 我希望它仅针对我的数据识别该日期是否是该月的最后一个日期。例如,如果我的数据的日期为 2016 年 1 月,而 1 月的最后一个日期是 1/20/2016,则应将其标记为该月的最后一天。同样,我想在我的数据中而不是日历上标识一个月中的最后一个星期五。

最佳答案

经过额外的说明并遵循 @eminik 的评论,下面的代码

library(data.table)
setDT(data)
data[, LastDayInMonth := day == max(day), by = .(year(day), month(day))]
data[, LastFridayInMonth := weekday == "Friday" & day == max(day), 
     by = .(year(day), month(day), weekdays(day))]

产生:

# show results (only relevant rows)
data[LastDayInMonth | LastFridayInMonth == TRUE]

          day  weekday LastDayInMonth LastFridayInMonth
1: 2016-01-29   Friday           TRUE              TRUE
2: 2016-02-26   Friday          FALSE              TRUE
3: 2016-02-29   Monday           TRUE             FALSE
4: 2016-03-25   Friday          FALSE              TRUE
5: 2016-03-31 Thursday           TRUE             FALSE
6: 2016-04-29   Friday           TRUE              TRUE
7: 2016-05-06   Friday          FALSE              TRUE
8: 2016-05-10  Tuesday           TRUE             FALSE

编辑:根据OP的要求修改代码以考虑年份的变化。

注意: weekdays 返回使用的语言环境中的名称字符向量。因此,该代码仅在您处于英语区域时才有效。否则,您可能必须先使用 Sys.setlocale(category = "LC_ALL", locale = "English")

关于r - 如何标记上周五或最后一天或上个月,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37683981/

相关文章:

r - 如何根据外部列向量过滤 R 数据表

r papaja::printnum(0L, numerals =F) 返回空值,而不是 "zero"

linux - 获取具有最新日期名称的文件夹

RMarkdown Reveal.js 演示代码折叠

r - 如何在 R Shiny 中单独更改 renderTable 中列的位数

r - 按名称包含在单个对象中的多列对data.frame排序?

r - 在具有多个观察期的数据框中添加缺失的日期值

java - 将日期和时间映射到 MySQL

java - Joda Time : Convert local to UTC ambiguity

javascript - 如何在输入类型日期中选择默认当前日期