根据唯一日期计算记录

时间:2013-12-09 05:46:05

标签: r aggregate

我有一个框架,其中包含一列日期(某些日期包含多条记录)和一个数字列。我想要一个框架,列出每个记录的一个日期,每个日期的数字总和,以及每个日期的记录发生次数。

起始帧:

SomeDate    SomeNum
10/1/2013   2
10/1/2013   3
10/2/2013   5
10/3/2013   4
10/3/2013   1
10/3/2013   1

我可以使用以下内容获得每个唯一日期的SomeNum总和:

newDF<-unique(within(df, {
    SumOfSomeNums <- ave(SomeNum, SomeDate, FUN = sum) 
}))

但我无法弄清楚如何计算每个唯一SomeDate发生的次数。

我想:

SomeDate   SumOfSomeNums  CountOfSomeDate
10/1/2013   5             2
10/2/2013   5             1
10/3/2013   6             3

什么会让我获得CountOfSomeDate数据? THX

1 个答案:

答案 0 :(得分:2)

继续使用您的方法,使用length作为聚合函数:

unique(within(mydf, {
  SumOfSomeNums <- ave(SomeNum, SomeDate, FUN = sum)
  CountOfSomeDate <- ave(SomeDate, SomeDate, FUN = length)
  rm(SomeNum)
}))
#    SomeDate CountOfSomeDate SumOfSomeNums
# 1 10/1/2013               2             5
# 3 10/2/2013               1             5
# 4 10/3/2013               3             6

但是,有很多替代方法可以到达这里。

这是aggregate方法:

do.call(data.frame, aggregate(SomeNum ~ SomeDate, mydf, function(x) c(sum(x), length(x))))
#    SomeDate SomeNum.1 SomeNum.2
# 1 10/1/2013         5         2
# 2 10/2/2013         5         1
# 3 10/3/2013         6         3

采用data.table方法:

library(data.table)
DT <- data.table(mydf)

DT[, list(Count = length(SomeNum), Sum = sum(SomeNum)), by = SomeDate]
#     SomeDate Count Sum
# 1: 10/1/2013     2   5
# 2: 10/2/2013     1   5
# 3: 10/3/2013     3   6
相关问题