假设我在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
将结果转换为稀疏矩阵组合,但不是他们的行索引。
谢谢你,圣诞快乐!
答案 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