Объединение данных в недельные, двухнедельные, ежемесячные и квартальные данные в R - PullRequest
7 голосов
/ 28 июня 2011

У меня есть фрейм данных с двумя столбцами. Дата, Пол

Я хочу изменить столбец Дата на начало недели для этого наблюдения. Например, если июнь 28-2011 - вторник, я бы хотел изменить его на июнь 27-2011. Обычно я хочу пометить поля даты так, чтобы две точки данных, которые находятся на одной и той же неделе, имели одинаковую дату.

Я также хочу иметь возможность делать это еженедельно или ежемесячно, особенно ежеквартально.

Обновление: Давайте использовать это как набор данных.

datset <- data.frame(date = as.Date("2011-06-28")+c(1:100))

Ответы [ 2 ]

9 голосов
/ 28 июня 2011

Один из лучших способов сделать это, о котором я недавно узнал, - использовать пакет lubridate:

library(lubridate)
datset <- data.frame(date = as.Date("2011-06-28")+c(1:100))
#Add 1, since floor_date appears to round down to Sundays
floor_date(datset$date,"week") + 1

Я не уверен в том, как делать двухнедельную сортировку, но ежемесячно и ежеквартально легко справляться с соответствующими base функциями:

quarters(datset$date)
months(datset$date)

РЕДАКТИРОВАТЬ: Интересно, что floor_date с lubridate не может округляться до ближайшего квартала, но функция с тем же именем в ggplot2 делает.

6 голосов
/ 28 июня 2011

Посмотрите на ?strftime. В частности, следующие форматы:

%b: сокращенное название месяца в текущая локаль (Также соответствует полный имя на входе.)

%B: полное название месяца в текущей локали. (Также совпадает сокращенное наименование при вводе.)

%m: месяц как десятичное число (01–12).

%W: неделя года в виде десятичного числа (00–53), используя понедельник в качестве первого дня недели (и, как правило, с первым Понедельник года как день недели 1). Конвенция Великобритании.

например:

> strftime("2011-07-28","Month: %B, Week: %W")
[1] "Month: July, Week: 30"

> paste("Quarter:",ceiling(as.integer(strftime("2011-07-28","%m"))/3))
[1] "Quarter: 3"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...