Я хотел бы экспортировать hclust-dendrogram из R в таблицу данных, чтобы впоследствии импортировать ее в другое («самодельное») программное обеспечение. str(unclass(fit))
предоставляет обзор текста для дендрограммы, но то, что я ищу, действительно является числовой таблицей. Я посмотрел пакет Bioconductor ctc, но результат его производства выглядит несколько загадочным. Я хотел бы иметь что-то похожее на эту таблицу: http://stn.spotfire.com/spotfire_client_help/heat/heat_importing_exporting_dendrograms.htm Есть ли способ получить это из объекта hclust в R?Экспорт дендрограммы в таблицу в R
5
A
ответ
1
Существует пакет, который делает точно противоположность того, что вы хотите - Labeltodendro ;-)
А если серьезно, вы не можете просто вручную извлечь элементы из hclust
объекта (например $merge
, $height
, $order
) и создавать собственные таблица из извлеченных элементов?
3
В случае, если кто-либо заинтересован в экспорте дендрограмм, вот мое решение. Скорее всего, это не самый лучший, поскольку я начал использовать R только недавно, но, по крайней мере, он работает. Поэтому предложения по улучшению кода приветствуются.
Итак, если hr
моего объект hclust и df
мои данные, первый столбец которой содержит простой индекс, начиная с 0, а именами строк являются именами сгруппированных элементов:
# Retrieve the leaf order (row name and its position within the leaves)
leaf.order <- matrix(data=NA, ncol=2, nrow=nrow(df),
dimnames=list(c(), c("row.num", "row.name")))
leaf.order[,2] <- hr$labels[hr$order]
for (i in 1:nrow(leaf.order)) {
leaf.order[which(leaf.order[,2] %in% rownames(df[i,])),1] <- df[i,1]
}
leaf.order <- as.data.frame(leaf.order)
hr.merge <- hr$merge
n <- max(df[,1])
# Re-index all clustered leaves and nodes. First, all leaves are indexed starting from 0.
# Next, all nodes are indexed starting from max. index leave + 1.
for (i in 1:length(hr.merge)) {
if (hr.merge[i]<0) {hr.merge[i] <- abs(hr.merge[i])-1}
else { hr.merge[i] <- (hr.merge[i]+n) }
}
node.id <- c(0:length(hr.merge))
# Generate dendrogram matrix with node index in the first column.
dend <- matrix(data=NA, nrow=length(node.id), ncol=6,
dimnames=list(c(0:(length(node.id)-1)),
c("node.id", "parent.id", "pruning.level",
"height", "leaf.order", "row.name")))
dend[,1] <- c(0:((2*nrow(df))-2)) # Insert a leaf/node index
# Calculate parent ID for each leaf/node:
# 1) For each leaf/node index, find the corresponding row number within the merge-table.
# 2) Add the maximum leaf index to the row number as indexing the nodes starts after indexing all the leaves.
for (i in 1:(nrow(dend)-1)) {
dend[i,2] <- row(hr.merge)[which(hr.merge %in% dend[i,1])]+n
}
# Generate table with indexing of all leaves (1st column) and inserting the corresponding row names into the 3rd column.
hr.order <- matrix(data=NA,
nrow=length(hr$labels), ncol=3,
dimnames=list(c(), c("order.number", "leaf.id", "row.name")))
hr.order[,1] <- c(0:(nrow(hr.order)-1))
hr.order[,3] <- t(hr$labels[hr$order])
hr.order <- data.frame(hr.order)
hr.order[,1] <- as.numeric(hr.order[,1])
# Assign the row name to each leaf.
dend <- as.data.frame(dend)
for (i in 1:nrow(df)) {
dend[which(dend[,1] %in% df[i,1]),6] <- rownames(df[i,])
}
# Assign the position on the dendrogram (from left to right) to each leaf.
for (i in 1:nrow(hr.order)) {
dend[which(dend[,6] %in% hr.order[i,3]),5] <- hr.order[i,1]-1
}
# Insert height for each node.
dend[c((n+2):nrow(dend)),4] <- hr$height
# All leaves get the highest possible pruning level
dend[which(dend[,1] <= n),3] <- nrow(hr.merge)
# The nodes get a decreasing index starting from the pruning level of the
# leaves minus 1 and up to 0
for (i in (n+2):nrow(dend)) {
if ((dend[i,4] != dend[(i-1),4]) || is.na(dend[(i-1),4])){
dend[i,3] <- dend[(i-1),3]-1}
else { dend[i,3] <- dend[(i-1),3] }
}
dend[,3] <- dend[,3]-min(dend[,3])
dend <- dend[order(-node.id),]
# Write results table.
write.table(dend, file="path", sep=";", row.names=F)
Смежные вопросы
- 1. Этикетки в дендрограммы в R
- 2. Экспорт фреймов данных R в таблицу Excel
- 3. Построение дендрограммы только подмножеством наблюдений в R
- 4. Как изменить метки дендрограммы в r
- 5. Heatmap дендрограммы на основе корреляции в R
- 6. Дендрограммы в R данных, которые уже классифицированы в R
- 7. Определение высоты кластеризации дендрограммы - R
- 8. Экспорт в таблицу 2 +
- 9. R: Экспорт CrossTable в латекс
- 10. Экспорт матрицы в r
- 11. Экспорт R data.frame/tbl в таблицу BigQuery Google
- 12. R heatmap.2 (gplots) данные дендрограммы доступа
- 13. R: Корреляция кластера дендрограммы с плотностью участка
- 14. Участок горизонтальной дендрограммы с подвесными листьями? (R)
- 15. Экспорт таблицы Excel в таблицу доступа (.accdb)
- 16. R :: тм - Создать таблицу/матрица долгосрочных частот ассоциации и добавить значения в дендрограммы
- 17. Экспорт данных в таблицу Excel
- 18. Экспорт резюме (aov.sample) в CSV в R
- 19. Как покрасить метки дендрограммы дополнительной факторной переменной в R
- 20. Как получить доступ к атрибутам дендрограммы в R
- 21. Участок Довольно и выровненные цветные дендрограммы в R
- 22. Как использовать определение горизонтальной дендрограммы класса «дендрограмма» в R
- 23. Экспорт таблиц R в HTML
- 24. Экспорт igraph Проблемы в R
- 25. Экспорт R data.frame в SPSS
- 26. Вырезать дендрограммы
- 27. Экспорт в таблицу значений в csv
- 28. объект окраски дендрограммы в matlab
- 29. РАВНООТСТОЯЩИХ из длины в Дендрограммы
- 30. написать таблицу в R
I просто использовал этот код, и он отлично работал. Большая трудность для меня? Чтение указаний о том, какие входные данные были необходимы, - это то, что описание кадра данных «df» действительно важно, люди. – eleanorahowe
@ Eleanor Я рад, что вы сочли это полезным. Вы правы, код зависит от конкретной структуры фрейма входных данных. Надеюсь, вы не потратили слишком много времени, чтобы понять это. – AnjaM