У меня есть следующая матрица взаимной корреляции:
df =
A B C
A 1 7 1
B 7 1 9
C 1 9 1
и я хотел бы сделать это в следующем формате:
A B 7
A C 1
B C 9
любой простой код R, который может сделать такое?
У меня есть следующая матрица взаимной корреляции:
df =
A B C
A 1 7 1
B 7 1 9
C 1 9 1
и я хотел бы сделать это в следующем формате:
A B 7
A C 1
B C 9
любой простой код R, который может сделать такое?
Не простой способ, а вариант в базе R:
mat[upper.tri(mat, diag = TRUE)] <- NA
tmp <- which(!is.na(mat), arr.ind = TRUE)
data.frame(col = colnames(mat)[tmp[, 2]], row = rownames(tmp), val = mat[tmp])
# col row val
#1 A B 7
#2 A C 1
#3 B C 9
данные
mat <- structure(c(1L, 7L, 1L, 7L, 1L, 9L, 1L, 9L, 1L), .Dim = c(3L,
3L), .Dimnames = list(c("A", "B", "C"), c("A", "B", "C")))
Еще один базовый вариант R
inds <- which(col(mat) < row(mat), arr.ind = TRUE)
data.frame(
col = colnames(mat)[inds[, "col"]],
row = rownames(mat)[inds[, "row"]],
val = mat[inds]
)
дает
col row val
1 A B 7
2 A C 1
3 B C 9
library(SOfun); dist2df(as.dist(mat))
. Или, возможно, сделатьas.data.frame(as.table(mat))[lower.tri(mat), ]
. - person A5C1D2H2I1M1N2O1R2T1   schedule 16.02.2021