Мы можем сделать
df$new_col <- seq_along(df$col)
df$new_col <- with(df, ave(new_col, col, FUN = rev))
df
# col new_col
#1 cat 6
#2 dog 4
#3 bird 5
#4 dog 2
#5 bird 3
#6 cat 1
На первом шаге мы создаем new_col
как последовательность, работающую от 1 до nrow(df)
.Таким образом, эта переменная не отличается от номеров строк.
Если мы думаем о переменной col
как об определяющей группе, мы можем получить «соответствующий индекс, где появляется совпадение», если мы rev
будем использовать только чтосозданный столбец по группам col
для получения желаемого результата.
В качестве единого пользователя
with(df, ave(seq_along(col), col, FUN = rev))
data
df <- structure(list(col = c("cat", "dog", "bird", "dog", "bird", "cat"
)), .Names = "col", class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6"))