R:在同一列中查找匹配值的索引

Ryb*_*bos 4 indexing r

今天这给我带来了很多麻烦,我确信有一个明显的解决方案,我没想到.

我有几千行的数据框.有一列,该列中的每个值恰好出现两次.我想找到每个匹配值的索引.该列看起来像这样:

  col
1 cat
2 dog 
3 bird
4 dog
5 bird
6 cat
Run Code Online (Sandbox Code Playgroud)

我想知道匹配出现的相应索引,所以它将返回如下内容:

[1] 6 4 5 2 3 1
Run Code Online (Sandbox Code Playgroud)

mar*_*kus 8

我们可以做的

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
Run Code Online (Sandbox Code Playgroud)

在第一步中,我们创建一个new_col从1到1的序列nrow(df).所以这个变量与行号没有区别.

如果我们将变量col视为定义组,那么我们可以得到'匹配出现的相应索引',如果我们rev按组col获取新创建的列以获得所需的输出.

作为一个oneliner

with(df, ave(seq_along(col), col, FUN = rev))
Run Code Online (Sandbox Code Playgroud)

数据

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"))
Run Code Online (Sandbox Code Playgroud)