使用已排序的值替换列中的值

use*_*782 1 r

我有一个看起来像这样的data.frame:

df <- data.frame(names=c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K"), 
                 values=c(1,1,4,6,7,7,7,9,9,14,15))
Run Code Online (Sandbox Code Playgroud)

我想要类似的东西:

df <- data.frame(names=c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K"), 
                 values=c(1,1,2,3,4,4,4,5,5,6,7))
Run Code Online (Sandbox Code Playgroud)

我知道这是一个愚蠢的问题,但我不知道该怎么做.谢谢

注意:第二个data.frame中的值应该是从1到n的顺序

flo*_*del 7

你可以使用cumsum:

df <- transform(df, values = cumsum(c(1, head(values, -1) != tail(values, -1))))
Run Code Online (Sandbox Code Playgroud)

另一个版本可能更容易理解,但我猜想会慢一点:

df<- transform(df, values = cumsum(c(1, diff(values) != 0))
Run Code Online (Sandbox Code Playgroud)