分组 posixct 数据非线性
Grouping posixct-data non-linear
我有一系列的视频上传,我想显示上个月、半年、年、2、年、3、年...
PUBLISHED_AT
是 posixct
类型,应该转换成 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()))
我有一系列的视频上传,我想显示上个月、半年、年、2、年、3、年...
PUBLISHED_AT
是 posixct
类型,应该转换成 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()))