分组 posixct 数据非线性

Grouping posixct-data non-linear

我有一系列的视频上传,我想显示上个月、半年、年、2、年、3、年...

PUBLISHED_ATposixct 类型,应该转换成 factor 上面的级别。

有什么好的方法吗?看来我不是第一个想到这种事情的人。

日期如下:

Date<- as.POSIXct(c("2015-12-11 00:00:01", "2016-01-11 00:00:01", "2014-01-11 00:00:01", "2015-12-11 00:00:01", "2016-04-04 08:22:01", "2013-12-11 00:00:01") 
                    , format= "%Y-%m-%d %H:%M:%S")
DF<- data.frame(Date, 
                Number=ceiling(abs(rnorm(1:6))))

我考虑过使用 cut-函数,但我不知道如何指定中断

你的数据是这样的吗?由于您尚未更新示例

  Date<- as.POSIXct(c("2015-12-11 00:00:01", "2016-01-11 00:00:01", "2014-01-11 00:00:01", "2015-12-11 00:00:01", "2016-04-04 08:22:01", "2013-12-11 00:00:01") 
                        , format= "%Y-%m-%d %H:%M:%S")
    DF<- data.frame(Date, 
                    Number=ceiling(abs(rnorm(1:6))))

我的做法是这样的:

PUBLISHED_AT <- as.POSIXct(c("2015-12-11 00:00:01") 
                       , format= "%Y-%m-%d %H:%M:%S")

library(lubridate)
half_year <- interval(start = ymd(Sys.Date() - months(6)), end = ymd(Sys.Date()), tzone = "ECST")
year <- interval(start = ymd(Sys.Date() - months(12)), end = ymd(Sys.Date()), tzone = "ECST")
two_years <- interval(start = ymd(Sys.Date() - months(24)), end = ymd(Sys.Date()), tzone = "ECST")

PUBLISHED_AT %within% c(half_year, year, two_years)
#[1] FALSE  TRUE TRUE

您现在可以为所有日期执行此操作,也许可以通过 lapply() 或其他方式执行此操作。

感谢 J_F 我得到了这样的结果:

library(lubridate)
oneMonth <- Sys.time() - ddays(30)
threeMonth <- Sys.time() - ddays(90)
sixMonth <- Sys.time() - ddays(180)
oneYear <-  Sys.time() - dyears(1)
twoYear <- Sys.time() - dyears(2)
threeYear<- Sys.time() - dyears(3)

cut(videos$PUBLISHED_AT, c(as.POSIXct(channel$PUBLISHED_AT), threeYear,twoYear,oneYear,sixMonth,threeMonth,oneMonth,Sys.time()))