如何按组创建计数器/计数?

时间:2011-12-22 13:29:53

标签: r aggregate

我有一些以下形状的数据:

更新:我的数据有一个额外的变量,我想分组。我使用了由Richie提供的以下解决方案的ddply但是没有用。

Country,group, date
US,A,'2011-10-01'
US,B,'2011-10-01'
US,C,'2011-10-01'
MX,D,'2011-10-01'
UK,E,'2011-10-02'
UK,B,'2011-10-02'
UK,A,'2011-10-02'
UK,C,'2011-10-02'

数据框已经订购,因此A首先出现,B秒出现,依此类推。我想要创建的是按日期排名变量,如下所示:

Country,group, date,rank
US,A,'2011-10-01',1
US,B,'2011-10-01',2
US,C,'2011-10-01',3
MX,D,'2011-10-01',1
UK,E,'2011-10-02',1
UK,B,'2011-10-02',2
UK,A,'2011-10-02',3
UK,C,'2011-10-02',4
    ....

1 个答案:

答案 0 :(得分:4)

首先,使用factor检查您的日期是否真的采用日期格式(不是class(your_dataset$date))。如果没有,请使用ymd中的lubridate进行转换。

其次,使用rank获得排名。 (比你想象的要容易,对吧!)

your_dataset $ rank< - rank(your_dataset $ date)

有几种不同的方法可以打破您可能想要探索的关系。

重新阅读您的问题后,我发现您不想对日期进行排名,您希望在日期内设置一个计数器。为此,请首先检查您的数据集是按日期排序的。

o <- with(your_dataset, order(date))
your_dataset <- your_dataset[o, ]

然后在每个日期块上调用seq_len

counts <- as.numeric(table(your_dataset$date))
your_dataset$rank <- unlist(lapply(counts, seq_len))