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)]