2015-10-06 119 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