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

时间:2015-12-29 08:46:29

标签: r subset

假设我在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将结果转换为稀疏矩阵组合,但不是他们的行索引。

谢谢你,圣诞快乐!

1 个答案:

答案 0 :(得分:0)

我们可以尝试data.table。转换' data.frame'到' data.table' (setDT(df1)),按' Dim1'和' Dim2'分组,获取.I中的行索引(list),我们可以提取。

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