This has been giving me a lot of trouble today and I'm sure there is an obvious solution I'm not thinking of.
I have a data frame of a few thousand rows. There is a column where each value in that column appears exactly twice. I want to locate the index of each matching value. The column looks like so:
col
1 cat
2 dog
3 bird
4 dog
5 bird
6 cat
And I would like to know the corresponding index where the match appears so it would return something like this:
[1] 6 4 5 2 3 1
We can do
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
In the first step we create a new_col
as a sequence running from 1 to nrow(df)
. So this variable is not different from the row numbers.
If we think of variable col
as defining groups, we get can get 'the corresponding index where the match appears' if we rev
erse the newly created column by groups of col
to get desired output.
As a oneliner
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"))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With