从R

时间:2016-05-22 05:25:06

标签: r date statistics grouping

我试图从数据中提取和计算年份。

我将数据格式更改为:

a$time = strptime(a$time, format="%m/%d/%y %I:%M %p")

现在我想知道一年中有多少次出现。例如,有多少数据来自2008年。任何人都可以帮助我吗?

2 个答案:

答案 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-012017-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)

只需要抽出4位数的年份,只需要考虑你的时间,就像这样:

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