2014-01-08 76 views
2

这个问题的最后计数的部分原因在于早期的问题here。我想根据三列汇总计数,并为日期,id和rdate三个变量定义的组设置事件的最后一个计数。我希望有看起来像这样:总结,并获得一组

  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) 

的样本数据如下:

structure(list(date = c("01-jan-90", "01-jan-90", "01-jan-90", 
"01-jan-90", "01-jan-90", "01-jan-90", "01-jan-90", "01-jan-90", 
"01-jan-90", "01-jan-90", "01-jan-90", "01-jan-90", "01-jan-90", 
"01-jan-90", "01-jan-90", "02-jan-90", "02-jan-90", "02-jan-90", 
"02-jan-90", "02-jan-90", "02-jan-90", "02-jan-90", "02-jan-90", 
"02-jan-90", "02-jan-90"), id = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L), rdate = c("08-jan-90", "15-jan-90", "01-jan-90", "22-jan-90", 
"29-jan-90", "08-jan-90", "15-jan-90", "01-jan-90", "22-jan-90", 
"29-jan-90", "08-jan-90", "15-jan-90", "01-jan-90", "22-jan-90", 
"29-jan-90", "09-jan-90", "16-jan-90", "02-jan-90", "23-jan-90", 
"30-jan-90", "09-jan-90", "16-jan-90", "02-jan-90", "23-jan-90", 
"30-jan-90"), event = c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 
3L, 3L, 3L, 3L, 3L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L)), .Names = c("date", 
"id", "rdate", "event"), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "1.1", "2.1", "3.1", "4.1", "5.1", "1.2", 
"2.2", "3.2", "4.2", "5.2", "6", "7", "8", "9", "10", "6.1", 
"7.1", "8.1", "9.1", "10.1")) 
+1

只要改变你的函数'length',即'集合体(事件〜ID + RDATE +日期,数据= myDF上,FUN =长度)'。 +1为良好的可重现的例子btw。 –

+0

@ SimonO101,谢谢你回答我的问题。 – Meso

回答

1

我认为这是你所追求的:

> 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拍摄效果和排序。

+0

做任何这些建议回答你的问题?如果是这样,请您将它们标记为已回答。谢谢! – DataWookie

0

不完全确定你想要做什么,但是这样的事情?

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 
>