2017-04-24 14 views
-1

R 프로그래밍에 익숙하지 않습니다. 수업 과정에서 R을 사용하여 권장 시스템을 구현하고 있습니다. 이미 데이터 테이블을 매트릭스로 변환 한 다음 irlba 기능을 사용하여 SVD = udv를 처리했습니다. 이제 다음과 같은 행렬이 생깁니다.기호 조합 (+ -)을 기반으로 행렬 값을 그룹화해야합니다.

svd sign matrix of u

는 지금은 자신의 기호에 따라 그것들을 분류 할 필요가있다. 예를 들어, 처음 세 개는 (-, -)의 조합이고 마지막 개는 (-, -)이므로 모두가 동일한 커뮤니티에 있어야합니다. 그러면 4 위와 5 위는 (-, +)이며, 이들은 같은 커뮤니티에 있습니다.

답변

1

각 열에 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 
+0

당신을 감사합니다. 정말 도움이됩니다. – Anu

+0

나는이 결과에서 또 하나의 질문을 가지고있다. 결과를 여러 그룹으로 나눈 후에 각 그룹의 행 이름을 숫자 및 저장으로 수집해야합니다 (저장하려면 목록이 더 좋은 방법이되기를 바랍니다). 예를 들어 (2,6,8), (7,9), (3,4,5,10), (1)을 추적해야합니다. 이 문제를 해결하도록 도와주세요. – Anu

+0

lapply (result, rownames)를 사용할 수 있습니다. 결과는 split의 결과입니다. – chinsoon12

1

또 다른 옵션은

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

안녕하세요, 이것은 또한 동일한 과정을 수행하고 있습니다. 답변 해 주셔서 감사합니다. – Anu