2011-12-22 31 views
3

我有一些数据的形状如下:如何按组创建计数器/计数?

更新:我的数据有一个额外的变量我想分组。我用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 
    .... 
+0

对不起,但我不同意 - 我在2011年问了这个问题,并在2011年得到了答案,你建议今年回答这个问题!很奇怪,你@ procrastinatus-maximus - 有点方便 – Altons 2016-10-14 06:45:50

+1

确实,我今年添加了一个答案,意在增加已经存在的比这个问题更早的答案。令我惊讶的是OP改变了我的接受答案。因此它是一个有效的重复imo。 – Jaap 2016-10-14 07:31:40

回答

4

首先,检查你的约会真的是在用class(your_dataset$date)日期格式(不是factor)。如果不是,请使用lubridate中的ymd进行转换。

二,使用rank获得排名。

your_dataset $排名<(比你想象吧!) - 等级(your_dataset $日期)

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

在重读您的问题时,我看到您不想排列日期,您希望在日期内有一个计数器。为此,请首先检查您的数据集是否按日期排序。

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

然后在每个日期块上拨打​​。

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

Thaksfür提示 - 我删除了我的答案。如果需要进一步澄清,奥尔顿肯定会评论。 – Seb 2011-12-22 14:10:13

+0

这是工作,但我用错误的方式制定了我的问题!查看更新。 – Altons 2011-12-22 14:32:50

+0

我需要通过2个变量而不是1个来创建排名,正如我在最初的问题中所述。对不起,我的痛苦 – Altons 2011-12-22 14:39:34