对R中的分组数据应用条件编号

对R中的分组数据应用条件编号,r,group-by,rank,R,Group By,Rank,我有一个类似下面的表,有100行数据 ID RANK 1 2 1 3 1 3 2 4 2 8 3 3 3 3 3 3 4 6 4 7 4 7 4 7 4 7 4 7 4 6 我想尝试找到一种按ID对数据进行分组的方法,这样我就可以分别重新对每个组进行分组重新排列列基于秩列,基本上从1开始重新编号,从最小到最大,但需要注意的是,根据秩列中的数字,重新排列列中的数字可以放入多次 换句话说,输出需要如下所示 ID Rank ReRAN

我有一个类似下面的表,有100行数据

ID  RANK
1   2
1   3
1   3
2   4
2   8
3   3
3   3
3   3
4   6
4   7
4   7
4   7
4   7
4   7
4   6
我想尝试找到一种按ID对数据进行分组的方法,这样我就可以分别重新对每个组进行分组

重新排列列基于秩列,基本上从1开始重新编号,从最小到最大,但需要注意的是,根据秩列中的数字,重新排列列中的数字可以放入多次

换句话说,输出需要如下所示

ID   Rank ReRANK
1    3       2
1    2       1
1    3       2
2    4       1
2    8       2
3    3       1
3    3       1
3    3       1
就我的一生而言,我不知道如何能够通过分组列和排名列的值对列进行重新排序

到目前为止,这是我最好的猜测,但它肯定没有做我需要它做的事情

ReRANK = mat.or.vec(length(RANK),1)
ReRANK[1] = counter = 1
for(i in 2:length(RANK)) {
  if (RANK[i] != RANK[i-1]) { counter = counter + 1 }
  ReRANK[i] = counter
}

提前感谢您的帮助

这里是一个使用
ave
rank
的基本R方法:

df$ReRank <- ave(df$Rank, df$ID, FUN=function(i) rank(i, ties.method="min"))
这里,我们使用
因子
为每个级别构建从上计数的值。然后我们强制它为整数

比如说,

temp <- c(rep(1, 3), 2,5,1,4,3,7)
[1] 2.5 2.5 2.5 5.0 8.0 2.5 7.0 6.0 9.0
rank(temp, ties.method="min")
[1] 1 1 1 5 8 1 7 6 9
as.integer(factor(rank(temp, ties.method="min")))
[1] 1 1 1 2 5 1 4 3 6

temp我不知道为什么输出的顺序不同于输入,但在dplyr中,您可以尝试
group\u by(df,ID)%%>%mutate(ReRANK=densite\u rank(rank))
temp <- c(rep(1, 3), 2,5,1,4,3,7)
[1] 2.5 2.5 2.5 5.0 8.0 2.5 7.0 6.0 9.0
rank(temp, ties.method="min")
[1] 1 1 1 5 8 1 7 6 9
as.integer(factor(rank(temp, ties.method="min")))
[1] 1 1 1 2 5 1 4 3 6
df <- read.table(header=T, text="ID   Rank 
1    2       
1    3       
1    3       
2    4       
2    8       
3    3      
3    3       
3    3 ")