我在通过聚类分析和相关性生成热图时需要一些帮助(我是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,但是错误当然会在矩阵中继续。我尝试使用as.numeric,但是没有用。我删除了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
指的是细菌的名称。
您可以使用row.names
的read.csv
参数将第一列设置为行的名称:
aa <- read.csv(file.choose(), row.names = 1)