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
假设我在 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