Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 聚合并获取组的最后计数_R_Aggregate - Fatal编程技术网

R 聚合并获取组的最后计数

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、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
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