2015-10-06 3 views
-1

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

У меня есть две колонки в таблице данных. Один содержит дату, а другой содержит некоторые уникальные номера. Я в основном, что количество строк в конкретный месяц и год.

Я хочу узнать количество показаний в 2011-02 годах, затем количество показаний в 2011-03 и т. Д. И так далее.

+3

Просьба воспроизводимый пример. – nikaltipar

+2

дайте нам свой фрейм данных. –

ответ

5

Вот некоторые бесплатные данные:

set.seed(1) 
df <- data.frame(
    x = sample(Sys.Date()-0:120, 20, TRUE), 
    y = sample(100, 20, TRUE) 
) 

Мы можем сделать это довольно легко с data.table с использованием переформатировать даты в by аргумента.

library(data.table) 
setDT(df)[, .(N = .N), by = .(month = format(x, "%Y-%m"))] 
#  month N 
# 1: 2015-09 5 
# 2: 2015-08 4 
# 3: 2015-07 7 
# 4: 2015-06 4 

Или с базой R-х aggregate()

aggregate(list(N = df$y), list(month = format(df$x, "%Y-%m")), length) 
#  month N 
# 1 2015-06 4 
# 2 2015-07 7 
# 3 2015-08 4 
# 4 2015-09 5 
1

Вот другой подход, использующий group_by. Я также использую lubridate, чтобы установить объекты даты POSIX, если вам интересно.

library(lubridate) 
library(dplyr) 

# create some data 
data <- data.frame("dates" = ymd(c("2014-05-01","2014-05-01","2014-05-01","2014-06-02","2014-06-02")), 
        "values" = c(1,3,5,2,5)) 

# this is the actual summarize. 
data %>% group_by(dates) %>% summarise(n = n()) 

дает

 dates  n 
     (time) (int) 
1 2014-05-01  3 
2 2014-06-02  2 
Смежные вопросы