我有一个框架,其中包含一列日期(某些日期包含多条记录)和一个数字列。我想要一个框架,列出每个记录的一个日期,每个日期的数字总和,以及每个日期的记录发生次数。
起始帧:
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
答案 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