我是R編程新手。對於我的課程工作,我正在使用R實現推薦系統。我已經將數據錶轉換爲矩陣,然後使用irlba函數處理SVD = udv。現在我有以下矩陣你。我需要根據符號組合來組合矩陣值(+ - )
現在我需要根據自己的標誌對它們進行分類。例如,在這裏,前三個是( - , - )的組合,然後是( - , - ),所以它們都必須在同一個社區中。然後第四和第五是( - ,+),他們在同一個社區等等。
我是R編程新手。對於我的課程工作,我正在使用R實現推薦系統。我已經將數據錶轉換爲矩陣,然後使用irlba函數處理SVD = udv。現在我有以下矩陣你。我需要根據符號組合來組合矩陣值(+ - )
現在我需要根據自己的標誌對它們進行分類。例如,在這裏,前三個是( - , - )的組合,然後是( - , - ),所以它們都必須在同一個社區中。然後第四和第五是( - ,+),他們在同一個社區等等。
您可以在每列上使用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])
嗨,這也是一樣的過程。謝謝你的回答。 – Anu
謝謝。這真的很有幫助。 – Anu
我在這個結果中還有一個問題。在我們將結果分成幾個組後,我需要將每個組的行名稱作爲數字和商店(存儲,我希望列表是更好的方式)。例如,需要跟蹤(2,6,8),(7,9),(3,4,5,10),(1)。請幫我解決這個問題。 – Anu
你可以使用lapply(result,rownames),其中結果是分割輸出 – chinsoon12