首页 > 解决方案 > R:多列(变量)上多行(对象)之间的相关矩阵

问题描述

我正在处理多列(变量)上多行(对象)的数据框。我想看看是否有任何行(对象)是相关的。我已经阅读了 corr() 并且似乎对于一个变量,我可以转置我的数据帧并将其输入 corr() 函数。但是如何处理每个观察/对象的多个变量?最终目标是在热图上绘制相关矩阵以吸引感兴趣的对象。

示例如下:

Treatment <- c('Drug A','Drug B','Drug C','Drug D','Drug E','Drug F')
Measurment_V1 <- runif(6, 0, 3000)
Measurment_V2 <- runif(6, 0, 20)
Measurment_V3 <- runif(6, 0, 1)
Measurment_V4 <- runif(6, 0, 120000)
Measurment_V5 <- runif(6, 0, 100)

df<- as.data.frame(cbind(Treatment,Measurment_V1,Measurment_V2,Measurment_V3,Measurment_V4,Measurment_V5))

每种药物都由 V1-V5 测量值解释(实际上有数百列) 那么如何获得所有药物 ABCD 之间的相关矩阵,然后像 Hmisc 库那样在热图上绘制它们的相关性呢?

标签: rcorrelation

解决方案


这可能会做到:

# Redo your data frame
df <- data.frame(Treatment,Measurment_V1,Measurment_V2,Measurment_V3,Measurment_V4,Measurment_V5)

# Transpose numeric columns
dft <- as.data.frame(t(df[,2:6]))

# Rename vars
names(dft) <- c("Drug_A","Drug_B","Drug_C","Drug_D","Drug_E","Drug_F")

# Correlation matrix
cor(dft)


Output:
          Drug_A    Drug_B    Drug_C    Drug_D    Drug_E    Drug_F
Drug_A 1.0000000 0.9995697 0.9999240 0.9999939 0.9998902 0.9999665
Drug_B 0.9995697 1.0000000 0.9998554 0.9994612 0.9998946 0.9997758
Drug_C 0.9999240 0.9998554 1.0000000 0.9998748 0.9999969 0.9999911
Drug_D 0.9999939 0.9994612 0.9998748 1.0000000 0.9998324 0.9999320
Drug_E 0.9998902 0.9998946 0.9999969 0.9998324 1.0000000 0.9999777
Drug_F 0.9999665 0.9997758 0.9999911 0.9999320 0.9999777 1.0000000

然后,您可以使用上述相关矩阵来绘制热图。

请注意,我曾经data.frame()重做您的数据框,因为它会生成数字列。


推荐阅读