按 R 中的相同值对值进行分组

Group values by same values in R

我希望有人能帮助我。我有一个示例数据框: 两列,半径和数字:

df <- data.frame(radius = c (2,3,5,7,4,6,9,8,3,7,8,9,2,4,5,2,6,7,8,9,1,10,8))
df$num <- c(1,1,1,1,2,1,1,1,1,3,3,3,3,1,1,2,2,2,3,3,3,3,3)
df

列 $num 具有相同的值 (1,2,1,3,1,2,3),我想为每个分组值分配另一个值(已排序)。结果应如下所示:

df$outcome <- c(1,1,1,1,2,3,3,3,3,4,4,4,4,5,5,6,6,6,7,7,7,7,7)
df

我们可以使用 data.table 中的 rleid。我们将'data.frame'转换为'data.table'(setDT(df)),通过'num'的id获取运行-length并赋值(:=)创建'结果栏。

library(data.table)
setDT(df)[,outcome:= rleid(num)]

一个base R选项是

df$outcome <-  cumsum(c(TRUE,diff(df$num)!=0))