2016-07-29 6 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を返す: ":A"、 "C:A"、... "C:C"
+2

直接的な回答ではなく代替方法です。 'which(x> = 8、arr.ind = TRUE) 'を使って行と列の位置を減らした表を得るのはどうでしょうか? –

答えて

1

次のことを "C C"

  • 奇数番号が返されます関数は行列と関数を取ります。この関数は、各セル値に対してTRUE/FALSEを返す必要があります。

    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" 
    

    アプリケーション相関行列に:以下の作品上記の行列を使用して、

    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) ] 
    } 
    

    したがって:

    x <- matrix(1:9, nrow = 3) 
    rownames(x) <- colnames(x) <- c("a", "b", "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

    これははるかに自然な答えのように見えます。すべての可能な組み合わせを構築するのではなく、論理テストを満たすものだけを構築します。私は '(FUN(x)、arr.ind = TRUE)'を使い、最初の列を使ってペーストするrownamesを選択し、2番目の列を使って列名を選択することにしました。 arr.indオプションがあります。 –

    関連する問題