R - 找到每个因素组合出现的行索引

R - find row indices where each combination of factors occurs

假设我在 R 中有这个数据框:

  Dim1 Dim2 Unused
1    A  100     3
2    A  200     6
3    A  100     7
4    A  100     4
5    A  200     8
6    B  200     9
7    B  200     2
8    B  100    10

我想找到一种快速方法来找到 Dim1 和 Dim2 的每个组合出现的行索引 (第三列在这里无用)。它与 table 类似,但不是返回带有计数的整数,我需要每个组合的行索引(向量)。我想输出应该是一个列表,其中每个元素都是一个向量(如 "Rows" 列所示):

Dim1 Dim2 Rows
   A  100 c(1,3,4)
   A  200 c(2,5)
   B  100 c(8)
   B  200 c(6,7)

这里我只显示两个因素,但一般情况下可能有n个因素列。现有组合的数量(table 的结果)非常稀疏,所以目前我首先调用 table 然后使用包 slam 将结果转换为稀疏矩阵,它已经计算了唯一组合,但不是它们的行索引。

谢谢你,圣诞快乐!

我们可以试试data.table。将 'data.frame' 转换为 'data.table' (setDT(df1)),按 'Dim1' 和 'Dim2' 分组,得到 .I 中的行索引 (.I) =14=],我们可以提取出来。

library(data.table)
res <- setDT(df1)[, list(Rows = list(.I)), by = .(Dim1, Dim2)]
res 
#    Dim1 Dim2    Rows
#1:    A  100 1, 3, 4
#2:    A  200    2, 5
#3:    B  200    6, 7
#4:    B  100       8
 res$Rows
 #[[1]]
 #[1] 1 3 4

 #[[2]]
 #[1] 2 5

 #[[3]]
 #[1] 6 7

 #[[4]]
 #[1] 8