R 聚合并获取组的最后计数
这个问题部分与前面的问题有关。我想基于三列聚合计数,并由date、id和rdate这三个变量定义a组的最后一个事件计数。我想要的是这样的:R 聚合并获取组的最后计数,r,aggregate,R,Aggregate,这个问题部分与前面的问题有关。我想基于三列聚合计数,并由date、id和rdate这三个变量定义a组的最后一个事件计数。我想要的是这样的: date rdate event 1 01-jan-90 08-jan-90 3 2 01-jan-90 15-jan-90 3 3 01-jan-90 01-jan-90 3 4 01-jan-90 22-jan-90 3 5 01-jan-90 29-jan-90 3
date rdate event
1 01-jan-90 08-jan-90 3
2 01-jan-90 15-jan-90 3
3 01-jan-90 01-jan-90 3
4 01-jan-90 22-jan-90 3
5 01-jan-90 29-jan-90 3
1.1 01-jan-90 08-jan-90 2
2.1 01-jan-90 15-jan-90 2
3.1 01-jan-90 01-jan-90 2
4.1 01-jan-90 22-jan-90 2
5.1 01-jan-90 29-jan-90 2
我已经尝试过这个代码,但这只对获取组的平均值有效
aa<-aggregate(event ~ id+rdate+date,data = mydf,FUN=mean)
不完全确定你想做什么,但像这样的事情
library(plyr)
ddply(mydf, .(id, date, rdate), summarise,
date = tail(date, 1),
id = tail(id, 1),
rdate = tail(rdate, 1),
mean = mean(event))
)
输出:
> library(plyr)
> ddply(mydf, .(id, date, rdate), summarise,
+ date = tail(date, 1),
+ id = tail(id, 1),
+ rdate = tail(rdate, 1),
+ mean = mean(event))
date id rdate mean
1 01-jan-90 1 01-jan-90 2.0
2 01-jan-90 1 08-jan-90 2.0
3 01-jan-90 1 15-jan-90 2.0
4 01-jan-90 1 22-jan-90 2.0
5 01-jan-90 1 29-jan-90 2.0
6 02-jan-90 2 02-jan-90 1.5
7 02-jan-90 2 09-jan-90 1.5
8 02-jan-90 2 16-jan-90 1.5
9 02-jan-90 2 23-jan-90 1.5
10 02-jan-90 2 30-jan-90 1.5
>
我想这就是你想要的:
> ddply(d, .(id, date, rdate), summarise, event = tail(event, 1))
id date rdate event
1 1 01-jan-90 01-jan-90 3
2 1 01-jan-90 08-jan-90 3
3 1 01-jan-90 15-jan-90 3
4 1 01-jan-90 22-jan-90 3
5 1 01-jan-90 29-jan-90 3
6 2 02-jan-90 02-jan-90 2
7 2 02-jan-90 09-jan-90 2
8 2 02-jan-90 16-jan-90 2
9 2 02-jan-90 23-jan-90 2
10 2 02-jan-90 30-jan-90 2
如果顺序很重要,您可以获取结果并按日期和rdate排序。只需将函数更改为
length
,即聚合(event~id+rdate+date,data=mydf,FUN=length)
+1顺便说一句@SimonO101,谢谢你回答我的问题。这些建议有没有回答你的问题?如果是,请您将其标记为已回答。谢谢
> ddply(d, .(id, date, rdate), summarise, event = tail(event, 1))
id date rdate event
1 1 01-jan-90 01-jan-90 3
2 1 01-jan-90 08-jan-90 3
3 1 01-jan-90 15-jan-90 3
4 1 01-jan-90 22-jan-90 3
5 1 01-jan-90 29-jan-90 3
6 2 02-jan-90 02-jan-90 2
7 2 02-jan-90 09-jan-90 2
8 2 02-jan-90 16-jan-90 2
9 2 02-jan-90 23-jan-90 2
10 2 02-jan-90 30-jan-90 2