2010-10-26 50 views
6

Tôi đang cố chuyển đổi một mảng 3D thành ma trận. Tôi muốn kích thước thứ ba của mảng để tạo thành hàng đầu tiên trong ma trận, và thứ nguyên thứ ba này nên được đọc theo hàng (tức là hàng 1, sau đó hàng 2 vv ... của thứ nguyên 3 nên tạo thành hàng đầu tiên của ma trận). Tôi đã đưa ra một ví dụ dưới đây, trong đó mảng có kích thước 4, 3 và 5, và ma trận kết quả có 5 hàng và 12 cột. Tôi có một giải pháp dưới đây mà đạt được những gì tôi muốn, nhưng nó có vẻ rất cồng kềnh cho mảng lớn (nó đầu tiên tạo vectơ từ các phần tử của mảng (theo hàng), và sau đó rbinds để tạo thành ma trận). Có cách nào thanh lịch hơn để làm điều này không? Cảm ơn trước cho các đề nghị.Biến đổi một mảng 3D thành ma trận trong R

dat <- array(rnorm(60), dim=c(4, 3, 5)) 

results <- list(1:5)    
for (i in 1:5) { 
    vec <- c(t(dat[, , i])) 
    results[[i]] <- vec 
    } 

datNew <- rbind(results[[1]], results[[2]], results[[3]], results[[4]], results[[5]]) 
+0

Bạn nên thay đổi việc xây dựng. Bạn có thể có nghĩa là "phần tử đầu tiên" của một mảng ma trận được in khi mảng được in. Các ma trận đó là các phần tử của thứ nguyên _3rd_ của mảng. Từ ví dụ của bạn, tôi thấy rằng bạn chỉ muốn làm phẳng hai thứ nguyên đầu tiên. Câu trả lời của tôi dưới đây cung cấp cho bạn những gì bạn muốn. – VitoshKa

+0

Cảm ơn VitoshKa đã chỉ ra điều đó - tôi đã chỉnh sửa câu hỏi. – Steve

Trả lời

16

Sử dụng aperm

X <- aperm(dat,c(3,2,1)) 
dim(X)<- c(5, 12) 
+0

Điều này hoạt động hoàn hảo, cảm ơn. – Steve

Các vấn đề liên quan