2014-01-28 2 views
1

У меня есть следующий набор данных:Добавление Даты в R

Data <- data.frame(
    date = c("2001-1", "2001-2", "2001-3", "2001-1", "2001-2", "2001-3", "2001-1", "2001-2", "2001-3"), 
    actor = c("A", "B", "C", "A", "B", "C", "A", "B", "C"), 
    cat = c("I", "II", "III", "I", "II", "III", "I", "II", "III"), 
    freq = c(2, 3, 4, 1, 2, 5, 2, 6, 3) 
) 

Есть актеры (А, В и С), которые обращаются три темы (I, II или III), по-другому (см FREQ).

Теперь я хочу совместить три месяца (2001-1, 2001-2 и 2001-3) на одного актера с одной четвертью на актера. Для этого необходимо также суммировать частоту.

Как я могу объединить три месяца в квартал? Как суммировать частоту в квартал?

ответ

2

Чтобы преобразовать год-месяцы кварталов вы можете попробовать это:

library(zoo) 
Data$qtr <- as.yearqtr(df$date, "%Y-%m") 

# sum up the frequency-counts per quarter 
aggregate(freq ~ qtr, data = Data, sum) 
+0

это работает! Спасибо! – feder80

+0

Честно говоря, я не совсем уверен, как вы хотите агрегировать свои данные после прочтения вашего вопроса и ваших комментариев в @Matthew Plourde ... Ну, надеюсь, что вы получите код, который вы хотите в конце. – Henrik

1
aggregate(freq ~ actor + quarter +cat, 
      data=transform(Data, quarter=quarters(as.Date(paste(date, '1', sep='-')))), 
      sum) 
# actor quarter cat freq 
# 1  A  Q1 I 5 
# 2  B  Q1 II 11 
# 3  C  Q1 III 12 

quarters принимает Date объект и возвращает его номер календарного года квартал. Чтобы преобразовать ваши строки месяца в Date s в базу R, нам нужно добавить день.

+0

что выглядит отлично, спасибо. но как насчет «кошки»? не нужно ли упоминать «кошку» в выражении? – feder80

+0

Почему вы хотите, чтобы я упомянул «кошку»? –

+0

потому что мне также нужен «кот» в моем наборе данных. ваш результат дает мне «актер», «четверть» и «частота». но «кошка» отсутствует. – feder80

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