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

时间:2013-07-29 16:38:33

标签: 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))

我想要类似的东西:

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))

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

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

3 个答案:

答案 0 :(得分:7)

您可以使用cumsum

df <- transform(df, values = cumsum(c(1, head(values, -1) != tail(values, -1))))

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

df<- transform(df, values = cumsum(c(1, diff(values) != 0))

答案 1 :(得分:4)

假设df$values已排序,另一种方法是使用table

tt <- table(df$values)
rep(seq_along(tt), tt)
# [1] 1 1 2 3 4 4 4 5 5 6 7

答案 2 :(得分:1)

另一种选择是转换为因子并从那里提取排序:

df$values = as.numeric(as.factor(df$values))