Tôi muốn xuất khẩu một chương trình ghi chú từ chương trình vào bảng dữ liệu để sau đó nhập nó vào phần mềm khác ("tự tạo"). str(unclass(fit))
cung cấp tổng quan về văn bản cho dendrogram, nhưng những gì tôi đang tìm kiếm thực sự là một bảng số. Tôi đã xem xét các gói ctc Bioconductor, nhưng đầu ra nó sản xuất trông hơi khó hiểu. Tôi muốn có một cái gì đó tương tự như bảng này: http://stn.spotfire.com/spotfire_client_help/heat/heat_importing_exporting_dendrograms.htm Có cách nào để có được điều này ra khỏi một đối tượng hclust trong R?Xuất dendrogram dưới dạng bảng trong R
5
A
Trả lời
1
Có gói thực hiện chính xác đối diện của những gì bạn muốn - Labeltodendro ;-)
Nhưng nghiêm túc, có thể bạn không chỉ cần tự trích xuất các yếu tố từ hclust
đối tượng (ví dụ $merge
, $height
, $order
) vaì taûo bảng từ các phần tử được trích xuất?
3
Trong trường hợp bất kỳ ai cũng quan tâm đến việc xuất chương trình dendrogram, đây là giải pháp của tôi. Có lẽ, nó không phải là tốt nhất khi tôi bắt đầu sử dụng R chỉ gần đây, nhưng ít nhất nó hoạt động. Vì vậy, đề xuất về cách cải thiện mã được hoan nghênh.
Vì vậy, nếu hr
là đối tượng hclust tôi và df
là dữ liệu của tôi, cột đầu tiên trong đó có chứa một chỉ số đơn giản bắt đầu từ 0, và những cái tên hàng là tên của các mặt hàng nhóm:
# 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)
Các vấn đề liên quan
- 1. Xóa nhãn trục x khỏi chương trình dendrogram trong r
- 2. dendrogram trong python
- 3. Làm thế nào để bạn xuất bảng từ phpMyAdmin dưới dạng định dạng bảng văn bản thuần túy?
- 4. Xuất bản các tệp đánh dấu R dưới dạng bài đăng blog
- 5. Xuất nhận xét dưới dạng nhận xét
- 6. django admin - xuất khẩu dưới dạng csv
- 7. Hiển thị TraMineR (R) dendrograms ở định dạng văn bản/bảng
- 8. Xuất các bảng R sang HTML
- 9. Lưu bảng HTML dưới dạng hình ảnh
- 10. Trích xuất cột từ data.frame dưới dạng Vector
- 11. hebrew xuất hiện dưới dạng dấu hỏi trong netbeans
- 12. PHPExcel xuất các số không dưới dạng ô trống
- 13. Truy vấn xuất khẩu MySQL dưới dạng câu lệnh chèn
- 14. Làm cách nào để xuất dữ liệu bảng html dưới dạng tệp .csv?
- 15. Chuỗi dưới dạng tham chiếu biến trong câu hỏi R newbie R
- 16. trả về bảng SQL dưới dạng JSON trong python
- 17. Nhiều hàng trong bảng dưới dạng chế độ xem backbone.js?
- 18. SQL FOR XML - Xuất dữ liệu dưới dạng Phần tử hoặc dưới dạng Thuộc tính
- 19. C# Định dạng Excel Interop giống như định dạng của Excel dưới dạng bảng
- 20. Làm cách nào để định dạng dữ liệu dạng bảng dưới dạng văn bản trong Java?
- 21. R đánh giá chuỗi dưới dạng khung dữ liệu
- 22. R trực tiếp lưu dữ liệu dưới dạng file zip
- 23. Nhập các bảng wikipedia trong R
- 24. Dump MySQL xem dưới dạng bảng với dữ liệu
- 25. Thay đổi kích cỡ nhãn của Dendrogram Cụm trong R 3.01
- 26. Làm cách nào để tạo thủ công đối tượng dendrogram (hoặc "hclust")? (trong R)
- 27. Đọc số dưới dạng chuỗi
- 28. Xuất các thành phần Spring dưới dạng dịch vụ OSGi
- 29. Xuất tinh thể Báo cáo dưới dạng hình ảnh
- 30. Xuất âm thanh dưới dạng các tệp WAV
tôi chỉ sử dụng mã này và nó hoạt động hoàn hảo. Khó khăn lớn đối với tôi? Đọc hướng dẫn về dữ liệu đầu vào nào được yêu cầu - mô tả của khung dữ liệu "df" thực sự quan trọng, mọi người. – eleanorahowe
@Eleanor Tôi rất vui vì bạn thấy nó hữu ích. Bạn nói đúng, mã dựa trên cấu trúc cụ thể của khung dữ liệu đầu vào. Tôi hy vọng bạn không dành quá nhiều thời gian để tìm ra nó. – AnjaM