如何按组创建计数/编号?

3

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

更新:我的数据有一个额外的变量需要分组。我使用了Richie提供的下面的解决方案,但没有起作用。

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

很抱歉,但我不同意 - 我在2011年提出了这个问题,并在那年得到了答案,而你所提出的答案是今年才给出的!真巧,居然是你 @procrastinatus-maximus - 真方便 - Altons
1
事实上,我今年添加了一个答案,意图是为了补充那些比这个问题更早的已有答案。令我惊讶的是,提问者将采纳答案改成了我的答案。因此,在我看来,这是一个有效的重复问题。 - Jaap
1个回答

4
首先,使用class(your_dataset$date)检查日期是否真正符合日期格式(而不是factor)。如果不是,请使用lubridate中的ymd进行转换。
当我重新阅读您的问题时,发现您不想给日期排名,而是想在日期内计数。为了实现这一点,首先检查数据集是否按日期排序。
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))

谢谢提示 - 我已删除我的答案。如果需要进一步的澄清,Altons肯定会发表评论。 - Seb
这个是可行的,但是我错误地表达了我的问题!请看更新。 - Altons
我需要通过两个变量而不是一个来创建排名,这与我最初在问题中陈述的不同。对于造成的困扰,我感到抱歉。 - Altons
最简单的解决方法是创建一个新的因子:within(your_dataset, group <- paste(Country, date))。然后在上面的解决方案中用 group 替换 date - Richie Cotton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接