我有一些以下形状的数据:
更新:我的数据有一个额外的变量,我想分组。我使用了由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 :(得分: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))