我需要一些帮助来生成具有聚类分析和相关性的热图(我是R的新手(。我的数据在Excel:中如下所示
Gene1 Gene2 Gene3 Gene4 Gene5 ... Gene296
Bacteria1 0 0 0 0.7 0.2 ... 0
Bacteria2 0.44 0 0 0 0 ... 0.9
Bacteria2 0 0.32 0 0.4 0 ... 0
... ... ... ... ... ... ... ...
Bacteria117 0 0.2 0.3 0 0.7 ... 0
0.32的值表示从0到100的32分。存在较高的分数(例如0.9(或较低的分数(比如0或0.2(。我查了一下NA,没有。我想根据我的实验数据(分数(进行聚类分析,找出哪些细菌形成了聚类。该文件为CSV。我用了这个代码:
> aa <- read.csv(file.choose())
> str(aa)
#I obtain this structure
'data.frame': 117 obs. of 296 variables:
$ X : Factor w/ 117 levels "Ac_neuii_BVI",..: 45 64 67 104 1 2 3 4 5 6 ...
$ AAC6_Iad : num 0 0 0 0 0 0 0 0 0 0 ...
$ aad6 : num 0 0 0 0 0 0 0 0 0 0 ...
$ abeS : num 0 0 0 0 0 0 0 0 0 0 ...
> is.numeric(aa)
[1] FALSE
当我尝试使用相关性或聚类时,我会得到以下错误:
> az <- cor(aa)
Error in cor(aa) : 'x' must be numeric
我尝试了as.matrix,但错误仍然存在于矩阵中。我试过用数字,但没用。我删除了X> aa$X <- NULL
,问题消失了(我不知道这是否是解决问题的正确方法(,但细菌的名称消失了,然后我得到了我的基因之间的相关性,而不是我的基因和细菌之间的相关性。同样的事情也发生在使用hclust或dist的集群中。有没有一种方法可以组织我的csv文件?我在互联网上还没有找到一篇关于如何解决"x必须是数字问题"以及如何进行相关性或测量基因与细菌之间距离的明确文章。
谢谢。很抱歉你对某些事情一无所知,这些事情对你来说可能是显而易见的。
您可以将细菌名称导入为row.names:
aa <- read.csv(file.choose(), row.names = 1)
aa$X
不是数字(它包含因子(。您可以使用进行转换
aa$X = as.numeric(aa$X)
然后az <- cor(aa)
将运行。。。但是(正如@Cole所指出的(这是没有意义的,因为X
指的是细菌的名称。
您可以使用read.csv
:的row.names
参数将第一列设置为行的名称
aa <- read.csv(file.choose(), row.names = 1)