Как сохранить имена строк для иерархической кластеризации в импортированных CSV-файлах - PullRequest
1 голос
/ 07 июня 2019

Я бы хотел провести анализ иерархической кластеризации данных, импортированных из файла .csv в R. У меня проблемы с сохранением первого столбца имен строк, поэтому мои подсказки по дендрограмме заканчиваются без имен, что бесполезно для последующих анализ и связь с метаданными.

Когда я импортирую файл .csv, если я использую фрейм данных, включающий первый столбец имен строк для функции dist, я получаю предупреждение: "Предупреждающее сообщение: В dist (as.matrix (df)): NA введены путем принуждения ". Я нашел предыдущий вопрос переполнения стека, который решал эту проблему: «НС, введенные путем принуждения» во время кластерного анализа в 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)

Все отлично работает с df, созданным в R, но я теряю имена строк с импортированными данными. Как мне это решить?

1 Ответ

2 голосов
/ 07 июня 2019
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=",")
...