按 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))
我希望有人能帮助我。我有一个示例数据框: 两列,半径和数字:
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))