2016-09-22 3 views
0

У меня есть серия видеороликов, и я хочу показать, сколько видео было загружено за последний месяц, полгода, год, 2, год, 3, год ...Группировка 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 -функции, но я не знаю, как определить разрывы

+0

Просьба представить данные/воспроизводимый пример. Мы также просим вас продемонстрировать некоторые попытки, которые вы сделали, и проблему, с которой вы столкнулись. –

ответ

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())) 
0

ли выглядит ваши данные, как это? Так как вы не обновили пример

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)))) 
+1

Да, это, кажется, хороший пример. Мой диапазон данных с 2011-12-11 15:00:12 до 2016-09-22 10:00:00 Я думал об использовании 'cut'-Function, но я не знаю, как указать разрывы – barracuda317

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() или что-то другое.

+0

Это не то, что я искал, потому что результат не является фактором, но это приводит меня к правильному пути. Я ответил своим подходом – barracuda317

Смежные вопросы