Khi cố gắng hiểu '%_rank' là gì, Tôi đã xem qua mã và tìm thấy biểu thức length(!is.na(x))
. Tôi không thể nghĩ về bất kỳ tình huống nào trong đó length(x) != length(!x)
vì vậy tôi tự hỏi nếu đây là lỗi đánh máy (có lẽ nó phải là sum(!is.na(x))
?) Hoặc nếu đây thực sự là một tình huống như vậy ??Typo trong `dplyr :: percent_rank`?
Trả lời
Từ ?is.na
tôi thấy hai khả năng:
Đầu tiên là nếu phương pháp mặc định của
is.na()
được sử dụng, sau đó nó được ghi chép lại để trở về "một vector logic của chiều dài tương tự như đối số của nóx
, chứaTRUE
cho các yếu tố đó được đánh dấuNA
hoặc đối với các vectơ số hoặc phức tạp,NaN
vàFALSE
nếu không. " (từ?is.na
, phần Giá trị).Do đó bạn chính xác trong phỏng đoán rằng không có trường hợp nào là
length(is.na(x)) != length(!is.na(x))
.Nếu phương pháp không mặc định được áp dụng, tác giả của phương thức đó có thể trả về một đối tượng không tương thích với tài liệu chung (và phương thức mặc định). Trong trường hợp đó, tất cả mọi phiên cược đều bị tắt.
Tôi thấy tùy chọn này hơi căng, nhưng có thể xảy ra nếu ngược lại.
Tôi đề nghị bạn báo cáo Vấn đề về repo github của Hadley.
Cảm ơn, tôi đã đề xuất nó [ở đây] (https://github.com/hadley/dplyr/issues/1132) – Jthorpe
Tôi nghĩ rằng đó là vấn đề ưu tiên. Ngay cả trợ giúp cũng cho biết:
x vectơ giá trị để xếp hạng. Thiếu giá trị còn lại. Nếu bạn muốn coi chúng là giá trị nhỏ nhất hoặc lớn nhất, thay thế bằng Inf hoặc -Inf trước khi xếp hạng.
Nếu bạn phân hủy percent_rank
đến các yếu tố cá nhân và áp dụng đối với một vector mẫu mà bạn nhận được:
> x <- c(1, 1, 2, 3, NA)
> left <- rank(x, ties.method = "min", na.last = "keep") - 1
> right <- length(!is.na(x)) - 1
> out <- left/right
> out
[1] 0.00 0.00 0.50 0.75 NA
> x[is.na(x)] <- Inf
> left <- rank(x, ties.method = "min", na.last = "keep") - 1
> right <- length(!is.na(x)) - 1
> out <- left/right
> out
[1] 0.00 0.00 0.50 0.75 1.00
Tôi tốt với thế chức năng làm việc ngay bây giờ. Bạn chỉ cần đảm bảo rằng NA
được đổi thành Inf/-Inf
nếu bạn muốn nhận phạm vi 0-1. Những gì tôi không chắc chắn về, nếu điều này phù hợp với tiêu chuẩn SQL2003.
Tôi cho rằng trong ví dụ đầu tiên của bạn, các giá trị 'NA' đang được xử lý không nhất quán: là giá trị lớn nhất, vì chúng làm giảm giá trị được xuất ra khác - nhưng chúng cũng bị bỏ lại" như là "ở chỗ chúng trả về NA. Bất kể, nếu nó được thiết kế để hoạt động như thế này, có mã mẫu số hiện tại gọi là '! Is.na' vì không có lý do nào sẽ là một cách kỳ lạ để thực hiện. Xem liên kết trong câu trả lời của tôi cho vấn đề GitHub có liên quan cho một số cuộc thảo luận về chức năng dự định. –
Đây là lỗi. Mã này đã được giới thiệu trong this commit, là một câu trả lời được nêu rõ cho issue 774. Hadley viết trong số phát hành # 774:
Oh oops, tôi muốn nói đó là lỗi trong triển khai R của tôi. Mẫu số phải là số lượng không phải là NA, không phải là độ dài.(nhấn mạnh thêm)
Chúng tôi không cần các tùy chọn để kiểm soát hành xử, chỉ cần đảm bảo rằng NA ở đầu vào là NA sản lượng
Nhưng khi bạn lưu ý, nó cần phải có được sum(!is.na(x))
không length
để thực hiện sửa chữa dự định.
- 1. sensorPortait typo
- 2. Xóa NA trong ống dplyr
- 3. dplyr 0.7.0 tidyeval trong gói
- 4. Chuỗi Manipulation/Agregation trong dplyr
- 5. Tham gia chéo trong dplyr trong R
- 6. Typo tạo ra các kết quả không mong muốn trong PHP
- 7. bỏ qua NA trong tổng hàng dplyr
- 8. dplyr: thêm hàng trong nhóm_by nhóm
- 9. lọc dplyr vào ngày
- 10. dplyr n_distinct với điều kiện
- 11. dplyr chọn sử dụng lôgic
- 12. grepl cho bảng dplyr sql?
- 13. rollmean với dplyr và magrittr
- 14. Dplyr có điều kiện windowing
- 15. Issue tải 'dplyr' đôi khi
- 16. Lag/nhóm theo nhóm trong R và dplyr
- 17. khai thác chuỗi số học trong dplyr với%>% ống
- 18. thêm đối số khác để tóm tắt trong dplyr
- 19. Bỏ qua trường hợp nhạy cảm trong dplyr tham gia
- 20. thêm tổng số hàng lề trong chuỗi dplyr
- 21. hành vi kỳ lạ với chọn trong dplyr
- 22. Lỗi khi sử dụng dplyr bên trong của hàm
- 23. sử dụng biến đổi dplyr() trong lập trình
- 24. lọc trong chức năng tóm tắt của dplyr
- 25. ghi bảng trong cơ sở dữ liệu với dplyr
- 26. dplyr: Integer lấy mẫu trong vòng đột biến
- 27. Hành vi lạ trong lát dplyr cho R
- 28. hoạt động khác trong một nhóm, sau một dplyr :: group_by()
- 29. Ma trận tương quan của các biến nhóm trong dplyr
- 30. Chọn toán tử trừ trong nhóm dplyr group_by
Tôi đồng ý với bạn. Các yêu cầu để mở rộng phạm vi 0,1 và 'dplyr :: percent_rank (1:10)' sẽ trả về 1 nhưng 'dplyr :: percent_rank (c (1:10, NA))' sẽ không. – MrFlick
Rất thú vị. Vấn đề tương tự cũng xuất hiện trong 'cume_dist()'. Tôi đã gửi yêu cầu kéo dựa trên bài đăng này: https://github.com/hadley/dplyr/pull/1133 –