Cách chọn ngẫu nhiên một vectơ


81

Tôi muốn sắp xếp lại thứ tự của các số trong vectơ một cách ngẫu nhiên, trong một lệnh đơn giản một dòng?

Vectơ V cụ thể của tôi có 150 mục nhập cho mỗi giá trị từ 1 đến 10:

V <- rep(1:10, each=150)

9
Các câu trả lời ở đây đúng hướng của bạn sample. Bạn có thể muốn xem các cảnh báo ở đây để biết một số nguy hiểm đi kèm với việc chỉ sử dụng mẫu.
Dason

@Dason: tl; dr miễn là độ dài vectơ được đảm bảo> 1, nó hoạt động.
smci

1
@smci Tl; Tiến sĩ là nó nguy hiểm bởi vì một người cảm thấy thoải mái với nó và sau đó khi nó dài đến mức 1, nó cắn bạn.
Dason

@Dason Tôi đã đọc nó, nhưng chưa có ai sửa đổi base::sampleđể buộc sử dụng seq_along. Ngoài ra tôi không thấy sample/sample.intcuộc gọi ở base::seq()đâu?
smci

Câu trả lời:


124

Đúng.

sample(V)

Từ ?sample:

Đối với 'mẫu', mặc định cho 'kích thước' là số mục được suy ra từ đối số đầu tiên, để 'mẫu (x)' tạo ra một hoán vị ngẫu nhiên của các phần tử của 'x' (hoặc '1: x').


Làm cách nào tôi có thể xáo trộn [1,1, 2, 2, 2, 2, 3, 3, 4, 5, 5, 5] để tôi nhận được một thứ như thế này: [5, 5, 3, 3, 3, 3, 1, 1, 2, 4, 4, 4]? sao cho mỗi phần tử có thể thay đổi ngẫu nhiên thành một phần tử khác nhưng vẫn giữ số lượng của mỗi phần tử không đổi?
Rotail

2
@Rotail: điều này đã làm những gì bạn muốn; các sizeđối số của samplegiá trị mặc định để size <- length(x). ( sample
Nhập

vâng! Cảm ơn bạn!
Rotail

24

Sử dụng samplechức năng

V<-rep(1:10, each=150)

set.seed(001) # just to make it reproducible
sample(V)

1
replace=FALSElà giá trị mặc định.
Ben Bolker

điều này làm cho một 150 giá trị từ bản gốc 1500
user1723765
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.