【问题标题】:Count number of observations per day, month and year in R计算 R 中每天、每月和每年的观察次数
【发布时间】:2015-11-16 11:14:53
【问题描述】:

我有以下形式的数据框(它太大了,无法在此处完整发布):

      listing_id    date    city    type    host_id availability
1   703451  25/03/2013  amsterdam   Entire home/apt 3542621 245
2   703451  20/04/2013  amsterdam   Entire home/apt 3542621 245
3   703451  28/05/2013  amsterdam   Entire home/apt 3542621 245
4   703451  15/07/2013  amsterdam   Entire home/apt 3542621 245
5   703451  30/07/2013  amsterdam   Entire home/apt 3542621 245
6   703451  19/08/2013  amsterdam   Entire home/apt 3542621 245

等等……

我想要三个新的数据框。一个计算特定年份(2013、2012、2011 等)的观察次数,另一个每月(07/2013、06/2013 等)和另一个每天(28/05/2013、29/05/ 2013 年等)。 我只想计算每单位时间发生了多少次。

我该怎么做?

【问题讨论】:

标签: r


【解决方案1】:

使用data.table,这非常简单:

library(data.table)
dt <- fread("listing_id    date    city    type    host_id availability
703451  25/03/2013  amsterdam   Entire_home/apt 3542621 245
703451  20/04/2013  amsterdam   Entire_home/apt 3542621 245
703451  28/05/2013  amsterdam   Entire_home/apt 3542621 245
703451  15/07/2013  amsterdam   Entire_home/apt 3542621 245
703451  30/07/2013  amsterdam   Entire_home/apt 3542621 245
703451  19/08/2013  amsterdam   Entire_home/apt 3542621 245")
dt$date <- as.Date(dt$date, "%d/%m/%Y")

dt[, .N, by=year(date)] 
#    year N
# 1: 2013 6

dt[, .N, by=.(year(date), month(date))] 
#    year month N
# 1: 2013     3 1
# 2: 2013     4 1
# 3: 2013     5 1
# 4: 2013     7 2
# 5: 2013     8 1

dt[, .N, by=date] # or: dt[, .N, by=.(year(date), month(date), day(date)] 
#          date N
# 1: 2013-03-25 1
# 2: 2013-04-20 1
# 3: 2013-05-28 1
# 4: 2013-07-15 1
# 5: 2013-07-30 1
# 6: 2013-08-19 1

【讨论】:

    【解决方案2】:

    我们可以将“日期”列转换为Date 类,使用?yearlibrary(lubridate) 提取year,使用as.yearmonlibrary(zoo) 获取月份-年份。我们将 'dates'、'yr'、'monyr' 放在 list 中,循环遍历它 (lapply),并使用 ave 在原始数据集 ('df1') 中创建出现计数列。最好将数据集放在list 中。但是,如果您坚持,我们可以使用 list2env 为多个对象重载全局环境。

    library(zoo)
    library(lubridate)
    dates <- as.Date(df1$date, '%d/%m/%Y')
    yr <- year(dates)
    monyr <- as.yearmon(dates)
    lst <- lapply(list(dates, yr, monyr), function(x) 
           transform(df1, Count=ave(seq_along(x), x, FUN= length)))
    names(lst) <- paste0('newdf', seq_along(lst))
    list2env(lst, envir=.GlobalEnv)
    

    【讨论】:

      【解决方案3】:

      将您的索引转换为 Postxct 格式,然后:

      counts &lt;- data.frame(table(as.Date(index(my_data_frame))))

      根据需要更改as.Date

      【讨论】:

      • “每天、每月和每年”呢?
      猜你喜欢
      • 2014-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-06
      相关资源
      最近更新 更多