如何在导入的csv文件上保留用于分层群集的行名

时间:2019-06-07 13:11:25

标签: r hierarchical-clustering distance-matrix

我想对从.csv文件导入到R中的数据进行三级聚类分析。我在保留行名的第一列时遇到了麻烦,因此我的树状图提示最终没有名称,这对下游没有用分析并链接元数据。

当我导入.csv文件时,如果我使用包含dist函数行名第一列的数据框,则会收到警告: “警告信息: 在dist(as.matrix(df))中:“通过强制引入的NA”。 我发现了先前的Stack Overflow问题,该问题已解决: "NAs introduced by coercion" during Cluster Analysis in R 提供的解决方案是删除行名。但这也从结果距离矩阵中删除了尖端标签,我需要理解树状图并链接到下游的元数据(例如,为树状图尖端添加颜色或基于其他变量添加热图)。

# Generate dataframe with example numbers
Samples <- c('Sample_A', 'Sample_B', 'Sample_C', 'Sample_D', 'Sample_E')
Variable_A <- c(0, 1, 1, 0, 1)
Variable_B <- c(0, 1, 1, 0, 1)
Variable_C <- c(0, 0, 1, 1, 1)
Variable_D <- c(0, 0, 1, 1, 0)
Variable_E <- c(0, 0, 1, 1, 0)
df = data.frame(Samples, Variable_A, Variable_B, Variable_C, Variable_D, Variable_E, row.names=c(1))
df
# generate distance matrix
d <- dist(as.matrix(df))
# apply hirarchical clustering 
hc <- hclust(d)
# plot dendrogram
plot(hc)

一切正常。但是,假设我要从文件导入真实数据...

# writing the example dataframe to file
write.csv(df, file = "mock_df.csv")

# importing a file
df_import <- read.csv('mock_df.csv', header=TRUE)

我不再使用与上面相同的代码来获取原始行名:

# generating distance matrix for imported file
d2 <- dist(as.matrix(df_import))
# apply hirarchical clustering 
hc2 <- hclust(d2)
# plot dendrogram
plot(hc2)

在R中创建的df一切都可以正常工作,但是导入的数据丢失了行名。我该如何解决?

1 个答案:

答案 0 :(得分:2)

Samples <- c('Sample_A', 'Sample_B', 'Sample_C', 'Sample_D', 'Sample_E')
Variable_A <- c(0, 1, 1, 0, 1)
Variable_B <- c(0, 1, 1, 0, 1)
Variable_C <- c(0, 0, 1, 1, 1)
Variable_D <- c(0, 0, 1, 1, 0)
Variable_E <- c(0, 0, 1, 1, 0)
df = data.frame(Samples, Variable_A, Variable_B, Variable_C, Variable_D, Variable_E, row.names=c(1))
df
d <- dist(as.matrix(df))
hc <- hclust(d)
plot(hc)
df
write.csv(df, file = "mock_df.csv",row.names = TRUE)
df_import <- read.table('mock_df.csv', header=TRUE,row.names=1,sep=",")
d2 <- dist(as.matrix(df_import))
hc2 <- hclust(d2)
plot(hc2)

换句话说,使用read.table而不是read.csv

df_import <- read.table('mock_df.csv', header=TRUE,row.names=1,sep=",")