对R中的分组数据应用条件编号
我有一个类似下面的表,有100行数据对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
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 ")