我试图从数据中提取和计算年份。
我将数据格式更改为:
a$time = strptime(a$time, format="%m/%d/%y %I:%M %p")
现在我想知道一年中有多少次出现。例如,有多少数据来自2008年。任何人都可以帮助我吗?
答案 0 :(得分:0)
由于您尚未提供任何数据,我正在生成一个data.frame
,其中包含一列,其中包含2007年至2017年之间的许多不同日期
a <- data.frame(time = seq(as.POSIXct("2007-01-01"), as.POSIXct("2017-01-01"), by = 60 * 60))
我正在使用seq()
生成一系列日期,从2007-01-01
到2017-01-01
,每个日期之间的差异为60 * 60秒(即1小时)
查看data.frame的头部,这里我们有日期和时间,相隔1小时(按预期)。
head(a)
# time
# 1 2007-01-01 00:00:00
# 2 2007-01-01 01:00:00
# 3 2007-01-01 02:00:00
# 4 2007-01-01 03:00:00
# 5 2007-01-01 04:00:00
# 6 2007-01-01 05:00:00
您有兴趣了解每年在data.frame中出现的次数。因此,我们可以将日期格式化为年份("%Y"
)
例如,
head(format(a$time, format = "%Y")) ## gives the 'head' of the data, formatted in years.
## [1] "2007" "2007" "2007" "2007" "2007" "2007"
来自帮助文件?table
表使用交叉分类因子来构建每个因子水平组合的计数的列联表。
即。它计算每个值的出现次数。因此,我们可以使用table()
来计算每年发生的次数。
将其分解为几个阶段:
t <- format(a$time, format = "%Y")
head(t)
[1] "2007" "2007" "2007" "2007" "2007" "2007"
因此,为了获得每年在数据中出现的次数,我们可以使用table(t)
。
table(t)
# 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017
# 8760 8784 8760 8760 8760 8784 8760 8760 8760 8784 1
如果您希望将其存储为data.frame,则可以使用
df_t <- as.data.frame(table(t))
# t Freq
# 1 2007 8760
# 2 2008 8784
# 3 2009 8760
# 4 2010 8760
# 5 2011 8760
# 6 2012 8784
要查找给定年份收集的数据量,您只需将该数据的子集化为该年。
df_t[df_t$t == 2008,]
# t Freq
# 2 2008 8784
所以我们在2008年有8784个观察结果。
答案 1 :(得分:0)
a$years = format(a$time, format="%Y")
然后你可以在dplyr中简单地统计这些。将这些年份拉出来的整个代码块只过滤了一年,然后计算出来的那些代码:
library(dplyr)
a %>% transmute(years = format(time, format="%Y")) %>% filter(years == "2008") %>% tally
有关更多信息,Hadley的dplyr Vignette是一个很好的开始:https://cran.rstudio.com/web/packages/dplyr/vignettes/introduction.html