我有一个包含三个变量的数据框:a,b,c。数据集中的前两列是所有可能组合的两个变量的配对,第三列是它们之间的相关性。如下所示。
> var1 <- c("a","a","b")
> var2 <- c("b","c","c")
> r <- c(.55,.25,.75)
> as.data.frame(cbind(var1,var2,r))
var1 var2 r
1 a b 0.55
2 a c 0.25
3 b c 0.75
我的问题是,是否可以将包含相关性的数据帧转换为R中的相关矩阵对象?我还想使用R的一些绘图和绘图功能。
最终我想要的是一个看起来像这样的矩阵
a b c
a 1 .55 .25
b .55 1 .25
c .25 .75 .75
答案 0 :(得分:2)
显然,你有相关矩阵的上三角和下三角部分(由r
提供),你不需要data.frame用于你的目的。为元素为1的矩阵提供下三角和上三角就足够了。
var <- unique(c(var1,var2))
corr <- matrix(1,nrow=length(r),ncol=length(r)) # a matrix with 1s
corr[lower.tri(corr,diag = FALSE)] <- r # lower triangular matrix to be r
corr[upper.tri(corr,diag = FALSE)] <- r # upper triangular matrix to be r
corr <- as.data.frame(corr) # formatting
row.names(corr) <- var # row names
colnames(corr) <- var # column names
包corrplot
有一个函数corrplot
,非常适合用不同的选项绘制相关矩阵(参见参数method
)。这是一个例子:
library(corrplot)
corrplot(as.matrix(corr),method="circle")
答案 1 :(得分:1)
试试这个:
vars <- unique(c(var1, var2))
df <- cbind.data.frame(var1,var2,r)
cor.df <- expand.grid(vars, vars)
cor.df <- rbind(merge(cor.df, df, by.x=c('Var1', 'Var2'), by.y=c('var1', 'var2')),
merge(cor.df, df, by.x=c('Var2', 'Var1'), by.y=c('var1', 'var2')),
data.frame(Var1=vars, Var2=vars, r=1))
library(reshape2)
cor.mat <- dcast(cor.df, Var1~Var2, value.var='r')
rownames(cor.mat) <- cor.mat[,1]
cor.mat <- as.matrix(cor.mat[-1])
cor.mat
# a b c
# a 1.00 0.55 0.25
# b 0.55 1.00 0.75
# c 0.25 0.75 1.00
# plot the correlation matrix
library(ggplot2)
ggplot(data = cor.df, aes(x=Var1, y=Var2, fill=r)) +
geom_tile()