按日期计算每个ID的交易

时间:2014-05-15 03:19:49

标签: r

如何按ID和按日期计算交易总数?

示例数据:

f<- data.frame(
id=c("A","A","A","A","C","C","D","D","E"),
start_date=c("6/3/2012","7/3/2012","7/3/2012","8/3/2012","5/3/2012","6/3/2012","6/3/2012","6/3/2012","5  /3/2012")

)

例外输出:

id | count
 A |  3     
 C |  2
 D |  1
 E |  1

逻辑:

因为A是3月6日,3月7日和3月8日所以计算3

C是3月5日,3月6日,所以计数2

等......

我尝试使用以下代码,我认为它只计算数据中出现的ID的数量。

library(lubridate)
f$date <- mdy(f$Date)
f1 <- s[order(f$id, f$Date), ]

如何实现此代码以获得我的愿望结果?

[注意:实际数据量很大,因此需要考虑优化。]

提前致谢。

3 个答案:

答案 0 :(得分:1)

我得到了一个不同的答案:

with(f, tapply(start_date, id, length))
A C D E 
4 2 2 1 

答案 1 :(得分:0)

不确定您希望结果的格式,但

rowSums(with(f, table(id, start_date)>0))

将返回一个命名向量,其中包含每个ID的不同天数。

答案 2 :(得分:0)

你可以试试。 f[!duplicated(f), ]f移除重复项,然后aggregate使用length函数进行聚合,即为start_date

提供id的计数
aggregate(start_date ~ id, f[!duplicated(f), ], length)
##   id start_date
## 1  A          3
## 2  C          2
## 3  D          1
## 4  E          1