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

时间:2018-09-29 21:03:24

标签: r indexing

今天,这给我带来了很多麻烦,我敢肯定有一个我没有想到的明显解决方案。

我有一个数千行的数据框。有一个列,该列中的每个值正好出现两次。我想找到每个匹配值的索引。该列如下所示:

  col
1 cat
2 dog 
3 bird
4 dog
5 bird
6 cat

我想知道匹配出现在哪里的相应索引,以便它返回如下内容:

[1] 6 4 5 2 3 1

1 个答案:

答案 0 :(得分: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

第一步,我们创建一个new_col作为从1到nrow(df)的序列。因此,此变量与行号没有区别。

如果我们认为变量col是定义组,那么如果我们revcol组对新创建的列进行设置,则可以获取“匹配项出现的对应索引”获得所需的输出。

作为一个班轮

with(df, ave(seq_along(col), col, FUN = rev))

数据

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