将posixct-data分组为非线性

时间:2016-09-22 14:40:38

标签: r datetime posixct

我有一系列视频上传,我想显示上个月,半年,一年,两年,一年,三年,上传了多少个视频......

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 - 函数,但我不知道如何指定中断

3 个答案:

答案 0 :(得分:1)

我的方法是这样的:

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()或其他内容执行此操作。

答案 1 :(得分:1)

感谢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 :(得分:0)

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

<link href="http://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.min.css" rel="stylesheet"/>
<div class="tooltip">Hover over me
  <span class="tooltiptext"><i class="fa fa-bold"></i><i class='fa fa-hourglass'></i></span>
</div>