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

R 我可以按年份分组计算日期吗?,r,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

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

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 = "")
等等

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

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

2010 2013 2014 2015 
   1    5    4    8 

substr
允许您隔离年份,并且
统计金额。

demo$date我将首先将日期转换为日期格式,而不是将其作为字符串处理

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
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 
库(lubridate)
#将字符串转换为日期格式

demo$date可以使用date和POSIXct类修改日期格式。这允许您处理看起来像“2010年1月1日”的日期

dates <- as.Date(demo$date, format = "%m/%d/%Y")
head(dates)
# [1] "2010-12-31" "2013-04-01" "2015-06-02" "2015-06-15" "2015-01-30"
# [6] "2014-04-15"

table(format(dates, format = "%Y"))
#
# 2010 2013 2014 2015 
#    1    5    4    8
dates我喜欢data.table。首先,我们需要在
Date
列中转换为“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

字符串
表(gsub('.*/(\\d{4})$,'\\1',demo$date)末尾的
/
后面的四位数字)
这里有很多很棒的选项。原则上,我选择使用lubridate,加载一个包,创建另一个依赖项,另一个破译代码的机会,屏蔽函数,只是为了完成一项任务。啊
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
setDT(demo)[, .N, keyby = year(date)]