2016-07-29 61 views
0

我經常需要處理多組變量之間的大相關矩陣,並且我想知道哪些相關符合給定的條件(例如,高於.2或.3或絕對的.2或.3)等等。所以給定一個相關矩陣,如果我能得到形成滿足條件的相關性的變量對,這將是有用的。如何使用與單元名稱的行名和列名匹配R中的條件的矩陣(例如,相關矩陣)中的單元名稱?

要多一點具體的,這裏是矩陣

x <- matrix(1:9, nrow = 3) 
rownames(x) <- colnames(x) <- c("a", "b", "c") 
x 

# x 
# a b c 
# a 1 4 7 
# b 2 5 8 
# c 3 6 9 

我想要一個可以讓我指定單元格的條件,然後將返回名稱匹配的細胞。

  • 例如,> 8返回
+2

不是直接的答案,而是另一種選擇。如何通過'which(x> = 8,arr.ind = TRUE)'得到一個減少的行和列位置表。 –

回答

1

以下 「C:C」

  • 奇數返回 「一個:一」, 「C::一個」,... 「C C」函數需要一個矩陣和一個函數。該函數應該爲每個單元格值返回TRUE/FALSE。

    使用樣本矩陣:

    x <- matrix(1:9, nrow = 3) 
    rownames(x) <- colnames(x) <- c("a", "b", "c") 
    

    的功能是:

    cell_matches <- function(x, FUN = function(X) X > .2) { 
        cellnames <- outer(row.names(x), colnames(x), function(X, Y) paste0(X, ":", Y)) 
        cellnames[FUN(x) ] 
    } 
    

    因此,使用以下的工作上面的矩陣:

    cell_matches(x, function(X) X > 8) 
    # [1] "c:c" 
    cell_matches(x, function(X) X %% 2 == 1) 
    # [1] "a:a" "c:a" "b:b" "a:c" "c:c" 
    

    應用到相關矩陣:

    # correlations above .80 
    cell_matches(cor(mtcars), function(X) X > .80 & X != 1)  
    # [1] "disp:cyl" "hp:cyl" "cyl:disp" "wt:disp" "cyl:hp" "disp:wt" 
    
  • 1
    check_cor <- function(mat,FUN) 
    { 
        apply(which(FUN(x), arr.ind = TRUE),1, 
        function(i) 
        { 
         paste0(row.names(mat)[i[1]],':',colnames(mat)[i[2]]) 
        } 
    ) 
    } 
    
    check_cor(cor(mtcars), function(X) X > .80 & X != 1) 
    
    +0

    這看起來更自然的答案。它不是構建所有可能的組合,而只是構建滿足邏輯測試的組合。我會選擇使用'which(FUN(x),arr.ind = TRUE)',然後使用第一列來選擇要粘貼的rownames並使用第二列來選擇colnames,但這是兩種使用arr.ind選項在哪。 –