如何在R中基于位置而非实际日期切割日期向量?
按日期在列表中的位置切割分组
嗨,我完全get你的需求啦——你不想基于日期的实际时间值来分组,而是想直接按这些日期在向量/列表里的位置顺序来切割,对吧?
你原来用cut()处理日期的思路没问题,但直接给cut()传入位置数值(比如0、2)是行不通的,因为cut()会把这些数值当成日期来解析,自然会出错。我们只需要换个处理对象:把日期的位置索引传给cut()就可以了!
解决方案示例
library(tidyverse) # 你的原始日期向量 dates <- parse_date(c("2018-02-01", "2018-02-15", "2018-02-20", "2018-03-20")) # 按位置切割:用seq_along()获取每个元素的位置索引 cut.dates <- cut(seq_along(dates), breaks = c(0, 2, length(dates))) # 查看分组结果 table(cut.dates)
运行这段代码后,你会得到这样的输出:
cut.dates (0,2] (2,4] 2 2
完美实现了把前2个日期分为一组,剩下的日期分为另一组的需求!
补充说明
- 如果你的日期是存储在数据框的列里(比如
df$dates),想按行位置分组的话,把length(dates)换成nrow(df)就可以了。 - 要是需要更灵活的分组,比如分成3组、4组,只需要调整
breaks参数的数值就行。比如想分成「前1个、中间2个、最后1个」三组:cut.dates <- cut(seq_along(dates), breaks = c(0, 1, 3, length(dates))) table(cut.dates) - 另外,用
findInterval()也能实现类似的分组效果,返回的是组编号(更适合后续的分组操作):group_num <- findInterval(seq_along(dates), c(0, 2, length(dates))) table(group_num)
内容的提问来源于stack exchange,提问作者stackinator
相关产品推荐
相关产品推荐

