【问题标题】:R - find row indices where each combination of factors occursR - 查找出现每种因素组合的行索引
【发布时间】:2015-12-29 08:46:29
【问题描述】:

假设我在 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 将结果转换为稀疏矩阵,该包已经计算了唯一组合,但不是它们的行索引。

谢谢你,圣诞快乐!

【问题讨论】:

    标签: r subset


    【解决方案1】:

    我们可以试试data.table。将“data.frame”转换为“data.table”(setDT(df1)),按“Dim1”和“Dim2”分组,得到list中的行索引(.I),我们可以提取它。

    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
    

    【讨论】:

    • 回复这么快,非常感谢!你能解释一下“。”的语法吗? (对我来说是新的)和 .I ?实际上我想得到结果,但不是作为数据框的新列(我这样描述只是为了解释我的问题),而是作为向量列表(不是字符串)。谢谢
    • @Pablo 更新了帖子。希望对你有帮助
    • 酷!这正是我想要的,所以我将其标记为已解决。我找不到有关 .I 函数和点的帮助,您能否提供一些参考?非常感谢!
    • @Pablo 你可以查看data.tablevignetteFAQs
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    相关资源
    最近更新 更多