我希望有人能帮助我。我有一个示例数据帧: 两列,radius和num:
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
答案 0 :(得分:1)
我们可以使用rleid
中的data.table
。我们将'data.frame'转换为'data.table'(setDT(df)
),通过id为'num'获取运行长度并分配(:=
)以创建'结果列。 / p>
library(data.table)
setDT(df)[,outcome:= rleid(num)]
base R
选项
df$outcome <- cumsum(c(TRUE,diff(df$num)!=0))