建立一个函数来计算R中的相关矩阵
building a function to compute correlation matrix in R
我想创建一个 R 函数来计算列之间具有观察值(值 1)的个体的百分比。例如,在下面的 data.frame:
id A B C
a 1 0 1
b 1 1 1
c 0 0 0
我想要一个交叉百分比矩阵,该矩阵表示具有 A 和 B、B 和 C 以及 A 和 C 的个体的百分比。在这种情况下,它将类似于:
A B C
A 1 0.33 0.66
B 0.33 1 0.33
C 0.66 0.33 1
我们可以将 data.frame 的子集转换为 matrix
(数字列),使用 crossprod
,然后将对角线值更改为 1
m1 <- as.matrix(df1[-1])
out <- crossprod(m1)/ncol(m1)
out[row(out) == col(out)] <- 1
-输出
out
# A B C
#A 1.0000000 0.3333333 0.6666667
#B 0.3333333 1.0000000 0.3333333
#C 0.6666667 0.3333333 1.0000000
数据
df1 <- structure(list(id = c("a", "b", "c"), A = c(1L, 1L, 0L), B = c(0L,
1L, 0L), C = c(1L, 1L, 0L)), class = "data.frame", row.names = c(NA,
-3L))
你可以这样做:
d <- as.matrix(df[-1])
e <- t(d) %*% d/ nrow(d)
diag(e) <- 1
e
A B C
A 1.0000000 0.3333333 0.6666667
B 0.3333333 1.0000000 0.3333333
C 0.6666667 0.3333333 1.0000000
我想创建一个 R 函数来计算列之间具有观察值(值 1)的个体的百分比。例如,在下面的 data.frame:
id A B C
a 1 0 1
b 1 1 1
c 0 0 0
我想要一个交叉百分比矩阵,该矩阵表示具有 A 和 B、B 和 C 以及 A 和 C 的个体的百分比。在这种情况下,它将类似于:
A B C
A 1 0.33 0.66
B 0.33 1 0.33
C 0.66 0.33 1
我们可以将 data.frame 的子集转换为 matrix
(数字列),使用 crossprod
,然后将对角线值更改为 1
m1 <- as.matrix(df1[-1])
out <- crossprod(m1)/ncol(m1)
out[row(out) == col(out)] <- 1
-输出
out
# A B C
#A 1.0000000 0.3333333 0.6666667
#B 0.3333333 1.0000000 0.3333333
#C 0.6666667 0.3333333 1.0000000
数据
df1 <- structure(list(id = c("a", "b", "c"), A = c(1L, 1L, 0L), B = c(0L,
1L, 0L), C = c(1L, 1L, 0L)), class = "data.frame", row.names = c(NA,
-3L))
你可以这样做:
d <- as.matrix(df[-1])
e <- t(d) %*% d/ nrow(d)
diag(e) <- 1
e
A B C
A 1.0000000 0.3333333 0.6666667
B 0.3333333 1.0000000 0.3333333
C 0.6666667 0.3333333 1.0000000