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

I need to group the matrix value based on sign combination (+ -)

我是 R 编程新手。对于我的课程作业,我正在使用 R 实现推荐系统。我已经将数据 table 转换为矩阵,然后使用 irlba 函数处理了 SVD=udv。现在我有以下矩阵 u。

现在我需要根据他们的标志对他们进行分类。例如,在这里,前三个是 (-, -) 的组合,最后一个是 (-,-),因此它们都必须在同一个社区中。然后第4和第5是(-,+),他们在同一个社区等等。

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

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

另一种选择是

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