如何按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), ]
如何实现此代码以获得我的愿望结果?
[注意:实际数据量很大,因此需要考虑优化。]
提前致谢。
答案 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