我可以计算按年份分组的日期吗?

时间:2015-08-21 23:38:10

标签: r

我有一些看起来像这样的数据:

demo <- read.table(text = "
date             num
'12/31/2010'     35
'04/01/2013'     34
'06/02/2015'     34
'06/15/2015'     34
'01/30/2015'     33
'04/15/2014'     33
'05/28/2014'     33
'06/02/2014'     33
'06/17/2015'     33
'06/25/2015'     33
'06/24/2015'     32
'07/31/2013'     32
'08/31/2013'     32
'04/27/2015'     31
'05/07/2015'     31
'12/30/2013'     31
'11/21/2014'     30
'12/20/2013'     30
",header = TRUE, sep = "")

如何按年份对这些进行分组和计算?

2010   1
2013   5

我可以使用plyr来计算每个日期:count(demo, vars = 'date'),但不能将它们分组。

5 个答案:

答案 0 :(得分:4)

我首先将日期转换为日期格式,而不是将它们视为字符串。

library(lubridate)
# Convert string to date format
demo$date <- as.Date(demo$date, "%m/%d/%Y")
# Table of counts by year
table(year(demo$date))

# 2010 2013 2014 2015 
#   1    5    4    8 

答案 1 :(得分:3)

我喜欢 data.table 。首先,我们需要在date列中转换为“日期”类,然后按年查找观察数量。

library(data.table)

demo$date <- as.Date(demo$date, "%m/%d/%Y")
as.data.table(demo)[, .N, keyby = year(date)]
#    year N
# 1: 2010 1
# 2: 2013 5
# 3: 2014 4
# 4: 2015 8

我们在这里使用keyby,因此我们得到了一个很好的有序结果。或者,要将整个表格更改为data.table,您可以使用setDT()代替as.data.table()。这是首选方法。

setDT(demo)[, .N, keyby = year(date)]

答案 2 :(得分:1)

table(substr(demo$date, 7,10))

2010 2013 2014 2015 
   1    5    4    8 

substr允许您隔离年份,table计算金额。

答案 3 :(得分:1)

demo$date <- as.Date(demo$date, format = "%m/%d/%Y")
demo$year <- format(demo$date, format = "%Y")
aggregate(num ~ year, demo, FUN = length)
##   year num
## 1 2010   1
## 2 2013   5
## 3 2014   4
## 4 2015   8

答案 4 :(得分:1)

可以使用Date和POSIXct类修改日期格式。这允许您处理看起来像'1/1/2010'的日期。

let vc = MyViewController(fun view ->
  // Now we have valid 'view' so we construct animator!
  let animator = UIDynamicAnimator(view)
  { new IInitializedView with
      member x.OtherMethod() = 
        // no problem here, because we have animator... 
        animator.Whatever() })