Tôi có một véc tơ và tôi có thể trả lại giá trị cao nhất và thấp nhất, nhưng cách trả về 5 giá trị cao nhất? Có một giải pháp đơn giản cho việc này không?Làm thế nào để trả lại 5 giá trị cao nhất từ vectơ trong R?
20
A
Trả lời
32
> a <- c(1:100)
> tail(sort(a),5)
[1] 96 97 98 99 100
2
Có, head(X, 5)
trong đó X
là véc tơ được sắp xếp của bạn.
12
x[order(x)[1:5]]
3
tail(sort.int(x, partial=length(x) - 4), 5)
Sử dụng sort.int với một phần có lợi thế là (khả năng) nhanh hơn bằng cách (khả năng) không làm một loại đầy đủ. Nhưng trong thực tế, việc triển khai của tôi xuất hiện chậm hơn một chút. Có lẽ điều này là bởi vì với tham số một phần! = NULL, loại vỏ được sử dụng chứ không phải là sắp xếp nhanh chóng?
> x <- 1:1e6
> system.time(replicate(100, tail(sort.int(x, partial=length(x) - 4), 5)))
user system elapsed
4.782 0.846 5.668
> system.time(replicate(100, tail(sort(x), 5)))
user system elapsed
3.643 0.879 4.854
+0
Nếu bạn sử dụng x <-runif (1e6), bạn sẽ thấy lợi ích. Lưu ý rằng 5 giá trị bạn nhận được đó thực sự sẽ là 5 giá trị cao nhất, nhưng không nhất thiết phải theo thứ tự được sắp xếp. – Tommy
Hoặc 'đầu (loại (a, giảm = TRUE), 5) ' – Marek
đuôi là nhanh hơn một chút so với người đứng đầu và giảm = TRUE > x <- rnorm (50.000.000) > system.time (đuôi (loại (x), 5)) hệ thống sử dụng trôi qua 22,64 0,25 22,95 > system.time (đầu (loại (x, giảm = TRUE), 5)) hệ thống sử dụng trôi qua 23,26 0,20 23,51 – Thierry
@Thierry Bạn nên chạy này nhiều hơn sau đó một lần và mất thời gian trung bình. Bởi vì tôi nghĩ rằng không có sự khác biệt (theo thống kê), dựa trên các mô phỏng của tôi. – Marek