【发布时间】:2016-07-29 07:21:55
【问题描述】:
library(magrittr)
library(dplyr)
V1 <- c("A","A","A","A","A","A","B","B","B","B", "B","B","C","C","C","C","C","C","D","D","D","D","D","D","E","E","E","E","E","E")
V2 <- c("A","B","C","D","E","F","A","B","C","D","E","F","A","B","C","D","E","F","A","B","C","D","E","F","A","B","C","D","E","F")
cor <- c(1,0.8,NA,NA,NA,NA,0.8,1,NA,NA,NA,NA,NA,NA,1,0.8,NA,NA,NA,NA,0.8,1,NA,NA,NA,NA,NA,NA,1,0.9)
df <- data.frame(V1,V2,cor)
# exclude rows where cor=NA
df <- df[complete.cases(df)==TRUE,]
这是完整的数据框,cor=NA代表小于0.8的相关性
df
V1 V2 cor
1 A A 1.0
2 A B 0.8
7 B A 0.8
8 B B 1.0
15 C C 1.0
16 C D 0.8
21 D C 0.8
22 D D 1.0
29 E E 1.0
30 E F 0.9
在上面的df中,F不在V1中,表示F不感兴趣
所以在这里我删除了 V2=F 的行(更一般地说,V2 等于不在 V1 中的值)
V1.LIST <- unique(df$V1)
df.gp <- df[which(df$V2 %in% V1.LIST),]
df.gp
V1 V2 cor
1 A A 1.0
2 A B 0.8
7 B A 0.8
8 B B 1.0
15 C C 1.0
16 C D 0.8
21 D C 0.8
22 D D 1.0
29 E E 1.0
所以现在,df.gp 是我需要处理的数据集
我在 V2 中删除了未使用的级别(在示例中为 F)
df.gp$V2 <- droplevels(df.gp$V2)
我不想排除自相关变量,以防某些 V1 与其他变量不相关,我想将它们中的每一个放在一个单独的组中
看cor,A和B是相关的,C和D是相关的,E自己属于一个组。
因此,这里的例子应该有三组。
【问题讨论】:
-
鉴于您没有显示任何相关系数,这是否有意义。对于
A - C、B - C、A - D等...? -
您的意思不是>.8,而不是>=.8,否则它们都在同一个组中?而且不是所有变量都必然与自身完美相关吗?
-
实际上我可以证明这一点,但真正的数据集是从遗传变异网站下载的,通常我只对相关系数>= 0.8 的那些对感兴趣。在样本数据框中,A和B在同一组,C和D在同一组。 A-C、A-D、B-C、B-D 之间无相关性 (>=0.8)。
-
您可以尝试查看
hclust/cutree,例如here——例如cutree(hclust(1 - as.dist(xtabs(cor ~ V1 + V2, df))), h = 0.8) -
我编辑了我的答案以反映我对您问题的解释
标签: r grouping correlation