我经常需要处理变量集之间的大相关矩阵,并且我想知道哪些相关满足给定条件(例如,高于.2或.3或绝对.2或.3)等等。因此,给定一个相关矩阵,如果我能得到形成满足条件的相关性的变量对,那将是有用的。
为了使它更具体,这里是矩阵
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
我想要一个允许我指定单元格条件的函数,然后返回匹配单元格的名称。
答案 0 :(得分:1)
以下函数采用矩阵和函数。对于每个单元格值,该函数应返回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 :(得分: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)