Tôi có một ma trận lớn mà từ đó tôi muốn trích xuất một ma trận nhỏ hơn một cách ngẫu nhiên. (Tôi muốn làm điều này 1000 lần, vì vậy cuối cùng là nó sẽ ở trong một vòng lặp for.) Nói ví dụ mà tôi có ma trận 9x9 này:chọn các cột được chỉ định bởi một vector ngẫu nhiên trong R
mat=matrix(c(0,0,1,0,1,0,0,0,1,0,0,0,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,1,0,0,0,1,
0,0,0,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,1,1,1,0,0,
1,0,1,0,0,0,0,0,1,0,1,0,0,0,1), nrow=9)
Từ ma trận này, tôi muốn một tập hợp con 3x3 ngẫu nhiên. Bí quyết là tôi không muốn bất kỳ khoản tiền hàng hoặc cột nào trong ma trận cuối cùng là 0. Một điều quan trọng nữa là tôi cần phải biết số lượng ban đầu của các hàng và cột trong ma trận cuối cùng. Vì vậy, nếu tôi chọn ngẫu nhiên các hàng 4, 5 và 7 và các cột 1, 3 và 8, tôi muốn có các số nhận dạng đó dễ dàng truy cập trong ma trận cuối cùng.
Đây là những gì tôi đã làm cho đến nay.
Trước tiên, tôi tạo một vectơ số hàng và số cột. Tôi đang cố gắng để giữ những gắn liền với ma trận trong suốt.
r.num<-seq(from=1,to=nrow(mat),by=1) #vector of row numbers
c.num<-seq(from=0, to=(ncol(mat)+1),by=1) #vector of col numbers (adj for r.num)
mat.1<-cbind(r.num,mat)
mat.2<-rbind(c.num,mat.1)
Bây giờ tôi có ma trận 10x10 với số nhận dạng. Tôi có thể chọn các hàng của mình bằng cách tạo một vector ngẫu nhiên và đặt ma trận.
rand <- sample(r.num,3)
temp1 <- rbind(mat.2[1,],mat.2[rand,]) #keep the identifier row
Điều này hoạt động tốt! Bây giờ tôi muốn chọn ngẫu nhiên 3 cột. Đây là nơi tôi đang gặp rắc rối. Tôi đã thử làm theo cách tương tự.
rand2 <- sample(c.num,3)
temp2 <- cbind(temp1[,1],temp1[,rand2])
Vấn đề là tôi kết thúc với một số khoản tiền hàng và cột bằng 0. Tôi có thể loại bỏ các cột tổng bằng 0 trước.
temp3 <- temp1[,which(colSums(temp1[2:nrow(temp1),])>0)]
cols <- which(colSums(temp1[2:nrow(temp1),2:ncol(temp1)])>0)
rand3 <- sample(cols,3)
temp4 <- cbind(temp3[,1],temp3[,rand3])
Nhưng tôi kết thúc với thông báo lỗi. Đối với một số lý do, R không thích để subset ma trận theo cách này. Vì vậy, câu hỏi của tôi là, có cách nào tốt hơn để đặt ma trận bằng vector ngẫu nhiên "rand3" sau khi các cột số không đã được gỡ bỏ HOẶC có cách nào tốt hơn để chọn ngẫu nhiên ba hàng và cột bổ sung sao cho có không có tổng hợp là 0?
Cảm ơn bạn rất nhiều vì sự giúp đỡ của bạn!
1000 ma trận tập hợp con thức nên là duy nhất? –
Nó không quan trọng. Ma trận gốc tôi lấy mẫu từ 1174 hàng và 455 cột, vì vậy tôi muốn lấy mẫu đại diện. Tuy nhiên, tôi chắc chắn có một số hữu hạn khả năng. Vấn đề duy nhất sẽ là nếu có một số loại thiên vị lấy mẫu đối với một trong những ngoại lệ duy nhất. – Laura