按类别排名R.

时间:2014-04-02 18:40:29

标签: r ranking sqldf

我有一个数据框,我想根据Category返回每个PCC的排名。

> head(newdf)
            ItemId    Category PCC
1       5063660193 Go to Gifts   2
2   24154563660193 Go to Gifts   1
2.1 24154563660193   All Gifts   1
3   26390063660193 Go to Gifts   3
3.1 26390063660193   All Gifts   3
4         18700100 Go to Gifts   1

我最初使用sqldf包来做这件事,但不幸的是R版3.0.2无法使用依赖(tcltk)。

使用sqldf类似以下的调用应该完成这项工作:

# ranking by category
rank <- sqldf("select 
                 nf.ItemId,
                 nf.Category,
                 nf.PCC,
                 rank() over(Partition by nf.Category order by nf.PCC, nf.ItemId, nf.Category) as Ranks

               from 
                 newdf as nf

               order by 
                 nf.Category,
                 nf.Ranks")

你知道我可以使用的其他选择吗?

1 个答案:

答案 0 :(得分:2)

这些只是少数几种不同的方法:

dat <- read.table(text = "            ItemId    Category PCC
       5063660193 'Go to Gifts'   2
   24154563660193 'Go to Gifts'   1
 24154563660193   'All Gifts'   1
   26390063660193 'Go to Gifts'   3
 26390063660193   'All Gifts'   3
         18700100 'Go to Gifts'   1",header = TRUE,sep = "")

library(plyr)
ddply(dat,.(Category),transform, val = rank(PCC))

library(dplyr)
mutate(group_by(dat,Category),val = rank(PCC))

library(data.table)
dat1 <- data.table(dat)
setkey(dat1,Category)
dat1[,val := rank(PCC),by = key(dat1)]

另外,我可以在R 3.0.2上加载 sqldf 就好了,所以我不确定你的问题是什么。

这使用rank的默认行为。请参阅?rankties.method参数,根据您的具体需求对其进行自定义。