R 我需要根据符号组合(+;-)对矩阵值进行分组

R 我需要根据符号组合(+;-)对矩阵值进行分组,r,matrix,sign,svd,R,Matrix,Sign,Svd,我不熟悉R编程。对于我的课程工作,我正在使用R实现推荐系统。我已经将数据表转换为矩阵,然后使用irlba函数处理SVD=udv。现在我有下面的矩阵u 现在我需要根据它们的符号对它们进行分类。例如,在这里,前三个是(-,)的组合,然后最后一个是(-,),所以它们都必须在同一个社区中。然后第四和第五是(-,+),它们在同一个社区中,依此类推。您可以在每列上使用符号,并将它们粘贴到组合字符串中。然后将矩阵拆分为每个组合 set.seed(0L) mat <- matrix(rnorm(20),

我不熟悉R编程。对于我的课程工作,我正在使用R实现推荐系统。我已经将数据表转换为矩阵,然后使用irlba函数处理SVD=udv。现在我有下面的矩阵u


现在我需要根据它们的符号对它们进行分类。例如,在这里,前三个是(-,)的组合,然后最后一个是(-,),所以它们都必须在同一个社区中。然后第四和第五是(-,+),它们在同一个社区中,依此类推。

您可以在每列上使用
符号,并将它们粘贴到组合字符串中。然后将矩阵拆分为每个组合

set.seed(0L)
mat <- matrix(rnorm(20), ncol=2)
split(data.frame(mat), apply(mat, 1, function(x) paste(sign(x), collapse=", ")))
#> $`-1, -1`
#>           X1         X2
#> 2 -0.3262334 -0.7990092
#> 6 -1.5399500 -0.4115108
#> 8 -0.2947204 -0.8919211
#> 
#> $`-1, 1`
#>             X1        X2
#> 7 -0.928567035 0.2522234
#> 9 -0.005767173 0.4356833
#> 
#> $`1, -1`
#>           X1         X2
#> 3  1.3297993 -1.1476570
#> 4  1.2724293 -0.2894616
#> 5  0.4146414 -0.2992151
#> 10 2.4046534 -1.2375384
#> 
#> $`1, 1`
#>         X1        X2
#> 1 1.262954 0.7635935
set.seed(0L)
mat$`-1,-1`
#>X1-X2
#> 2 -0.3262334 -0.7990092
#> 6 -1.5399500 -0.4115108
#> 8 -0.2947204 -0.8919211
#> 
#> $`-1, 1`
#>X1-X2
#> 7 -0.928567035 0.2522234
#> 9 -0.005767173 0.4356833
#> 
#> $`1, -1`
#>X1-X2
#> 3  1.3297993 -1.1476570
#> 4  1.2724293 -0.2894616
#> 5  0.4146414 -0.2992151
#> 10 2.4046534 -1.2375384
#> 
#> $`1, 1`
#>X1-X2
#> 1 1.262954 0.7635935
另一个选项是

lapply(split(seq_len(nrow(mat)), 
    interaction(as.data.frame(sign(mat)))), function(i) mat[i,, drop = FALSE])

非常感谢。这真的很有帮助。在这个结果中我还有一个问题。在我们将结果分成几个组后,我需要收集每个组的行名称作为数字并存储(为了存储,我希望列表是更好的方式)。例如,需要跟踪(2,6,8)、(7,9)、(3,4,5,10)、(1)。请帮我解决这个问题。您可以使用lappy(result,rownames),其中result是split的输出。这是一个很大的帮助。非常感谢。我对R完全陌生。所以,如果我问一些非常基本的问题,请原谅。没问题!嗨,这也是同样的过程。谢谢你的回答。