如何根据另一列定义的组计算一列的排名?

| Windows 7上的R版本2.11.1 32位 我得到如下数据集:
USER_A USER_B SCORE
1        6      0.2
1        7      0.1
1        10     0.15
2        6      0.2
2        9      0.12
3        8      0.15
3        9      0.3
USER_A是1:3,而USER_B是6:10。现在,我需要输出按他们的SCORE排序的USER_B和USER_B:
USER_A      ranking of USER_B
1  3  1  2  #the ranking of USER_B 6,7,10(which belong to USER_A 1)
2  2  1     #the ranking of USER_B 6,9(which belong to USER_A 2)
3  1  2     #the ranking of USER_B 8,9(which belong to USER_A 3)
实际上,我只需要输出排名:
3 1 2
2 1
1 2
这很烦人,因为每一行的长度都不一样!我无法将它们存储在矩阵中然后输出。 谁能帮我解决这个问题?     
已邀请:
df <- read.table(con <- textConnection(\"USER_A USER_B SCORE
1        6      0.2
1        7      0.1
1        10     0.15
2        6      0.2
2        9      0.12
3        8      0.15
3        9      0.3
\"), header = TRUE)
close(con)
一种方法是拆分数据:
sdf <- with(df, split(SCORE, f = USER_A))
lapply(sdf, rank)
最后一行给出:
> lapply(sdf, rank)
$`1`
[1] 3 1 2

$`2`
[1] 2 1

$`3`
[1] 1 2
一种替代方法是使用
aggregate()
,如下所示:
aggregate(SCORE ~ USER_A, data = df, rank)
哪个返回:
> (foo <- aggregate(SCORE ~ USER_A, data = df, rank))
  USER_A   SCORE
1      1 3, 1, 2
2      2    2, 1
3      3    1, 2
但是这里的输出有些不同,现在我们有了一个数据帧,第二个组件“ 9”是一个列表,就像输出的“ 10”版本一样:
> str(foo)
\'data.frame\':   3 obs. of  2 variables:
 $ USER_A: int  1 2 3
 $ SCORE :List of 3
  ..$ 0: num  3 1 2
  ..$ 1: num  2 1
  ..$ 2: num  1 2
> foo$SCORE
$`0`
[1] 3 1 2

$`1`
[1] 2 1

$`2`
[1] 1 2
    

要回复问题请先登录注册