Trong R, làm cách nào bạn kiểm tra một vectơ để xem nó có chứa một phần tử đã cho không?kiểm tra nếu một vector chứa một phần tử đã cho
Trả lời
Cả hai match()
(trả về hình thức đầu tiên) và %in%
(trả về một hàm Boolean) được thiết kế cho việc này.
v <- c('a','b','c','e')
'b' %in% v
## returns TRUE
match('b',v)
## returns the first location of 'b', in this case: 2
Bạn có thể sử dụng %in%
điều hành:
vec <- c(1, 2, 3, 4, 5)
1 %in% veC# true
10 %in% veC# false
Các bất kỳ() chức năng làm cho mã dễ đọc
> w <- c(1,2,3)
> any(w==1)
[1] TRUE
> v <- c('a','b','c')
> any(v=='b')
[1] TRUE
> any(v=='f')
[1] FALSE
Hãy nhận biết hành vi này khác với '% trong%': 'bất kỳ (1 == NA)' trả về 'NA', trong đó' 1% trong% NA' trả về 'FALSE'. – dash2
Cũng để tìm vị trí của phần tử "mà" có thể được sử dụng làm
pop <- c(3,4,5,7,13)
which(pop==13)
và để tìm các yếu tố mà không được chứa trong vector mục tiêu, người ta có thể làm điều này:
pop <- c(1,2,4,6,10)
Tset <- c(2,10,7) # Target set
pop[which(!(pop%in%Tset))]
'mà' thực sự là thích hợp hơn đôi khi nó cho bạn * tất cả * các vị trí phù hợp (như một mảng), không giống như' match'. Mặc dù điều này có lẽ không phải là những gì OP yêu cầu, không giống như http://stackoverflow.com/questions/1169388/finding-multiple-elements-in-a-vector – Fizz
Tại sao bận tâm với 'which' nếu bạn chỉ muốn tìm các phần tử không có trong 'Tset'? Bạn chỉ có thể lập chỉ mục 'pop' trực tiếp; 'pop [! pop% in% Tset]' – Houshalter
is.element()
làm cho mã dễ đọc hơn, và giống hệt %in%
v <- c('a','b','c','e')
is.element('b', v)
'b' %in% v
## both return TRUE
is.element('f', v)
'f' %in% v
## both return FALSE
subv <- c('a', 'f')
subv %in% v
## returns a vector TRUE FALSE
is.element(subv, v)
## returns a vector TRUE FALSE
Tôi biết tài liệu nói 'is.element (x, y) giống hệt với x% trong% y'. Nhưng, tôi không biết tại sao, 'is.elements' hoạt động khi trộn các số nguyên và số và'% trong% 'không – pomber
@pomber: Bạn có thể đưa ra ví dụ về điều này không? – discipulus
Tôi thực sự như grep() và grepl() cho mục đích này.
grep() trả về một vectơ các số nguyên, cho biết vị trí phù hợp.
yo <- c("a", "a", "b", "b", "c", "c")
grep("b", yo)
[1] 3 4
grepl() trả về một vector logic, với "TRUE" tại vị trí của trận đấu.
yo <- c("a", "a", "b", "b", "c", "c")
grepl("b", yo)
[1] FALSE FALSE TRUE TRUE FALSE FALSE
Các chức năng này phân biệt chữ hoa chữ thường.
Theo mặc định, 'grep' có biểu thức chính quy làm phần tử đầu tiên, do đó, để so khớp chính xác cho' "b" ', hoặc dùng'^e $ 'hoặc thêm', cố định = TRUE'). – reinierpost
Không sử dụng regex để đối sánh chính xác. Điều này là nguy hiểm và có thể có kết quả bất ngờ –
Vâng, đây là một ý tưởng khủng khiếp, không tốt, rất xấu - không hiệu quả và được bảo đảm để phá vỡ. Ví dụ. 'myvar <- 'blah'; grepl ('b', myvar, fixed = TRUE) 'sẽ trả về' TRUE' mặc dù 'b' không nằm trong 'myvar'. – dash2
Tôi sẽ nhóm các tùy chọn dựa trên đầu ra. Giả sử vectơ sau cho tất cả các ví dụ.
v <- c('z', 'a','b','a','e')
Để kiểm tra sự hiện diện của:
% trong%
> 'a' %in% v
[1] TRUE
bất kỳ()
> any('a'==v)
[1] TRUE
là.yếu tố()
> is.element('a', v)
[1] TRUE
Đối với việc tìm kiếm sự xuất hiện đầu tiên:
trận()
> match('a', v)
[1] 2
Đối với việc tìm kiếm tất cả các lần xuất hiện như vector của chỉ số:
mà()
> which('a' == v)
[1] 2 4
Đối với việc tìm kiếm tất cả các lần xuất hiện như logic vector:
==
> 'a' == v
[1] FALSE TRUE FALSE TRUE FALSE
Edit: Loại bỏ grep() và grepl() khỏi danh sách vì lý do nêu trong ý kiến
Như đã nhận xét [ở đây] (https://stackoverflow.com/questions/1169248/r-function-for-testing-if-a-vector-contains-a-given-element/34056066#comment66181358_34056066) và [tại đây] (https://stackoverflow.com/questions/1169248/r-function-for-testing-if-a-vector-contains-a-given-element/34056066#comment73025314_34056066), không sử dụng 'grep()' hoặc biểu thức chính quy để tìm kết quả khớp chính xác. – Uwe
- 1. Kiểm tra nếu một ComboBox chứa mục
- 2. Kiểm tra nếu một mảng chứa một mảng với PHP
- 3. Kiểm tra xem một phần tử DOM đã cho đã sẵn sàng
- 4. Làm thế nào để kiểm tra trong MATLAB nếu một vector chỉ chứa số không?
- 5. Kiểm tra xem một chuỗi có chứa một phần tử từ một danh sách (các chuỗi)
- 6. Kiểm tra nếu đối tượng IndexedDBStore đã chứa khóa
- 7. Chọn các phần tử m một cách ngẫu nhiên từ một vector chứa các phần tử n
- 8. Kiểm tra nếu WPF DataRowView chứa một cột
- 9. Kiểm tra xem phần tử có chứa phần tử khác trong jQuery
- 10. Làm thế nào để kiểm tra xem tuple có chứa một phần tử trong Python không?
- 11. kiểm tra xem div có chứa một phần tử trong jQuery
- 12. Mã cho phần tử thứ hai thành phần tử cuối cùng trong một vector
- 13. Xóa các phần tử khỏi một vector
- 14. Kiểm tra nhiều chứa trên một chuỗi
- 15. Kiểm tra nếu một lệnh đã chạy thành công
- 16. Selenium: kiểm tra xem phần tử có chứa một số văn bản
- 17. Kiểm tra trong JQuery nếu một phần tử ở trên cùng của màn hình
- 18. kiểm tra xem phần tử đã được cuộn lên đầu
- 19. Làm thế nào để kiểm tra nếu có từ trong một danh sách chứa một chuỗi một phần?
- 20. Kiểm tra liệu một vector rỗng
- 21. clojure - xóa một phần tử khỏi một vector ref
- 22. Kiểm tra khả năng hiển thị của một phần tử
- 23. Sử dụng lapply với nếu để kiểm tra mỗi phần tử trong một danh sách
- 24. Nếu phần tử vượt quá một phần tử khác?
- 25. Kiểm tra xem phần tử là trước hoặc sau một phần tử trong jQuery
- 26. jQuery: làm cách nào để kiểm tra xem thuộc tính phần tử có chứa một phần của chuỗi không?
- 27. Phát hiện nếu tôi đang nhấp vào một phần tử trong một phần tử
- 28. kiểm tra xem std :: vector có chứa một đối tượng nhất định không?
- 29. Kiểm tra nếu một nút radio được kiểm tra jquery
- 30. Các phần tử hộp kiểm HTML chỉ được gửi nếu chúng được kiểm tra?
đôi khi tôi tự hỏi tại sao R chỉ không sử dụng từ chứa để làm cho nó dễ dàng hơn người dùng – greg121
xem xét rằng "trong" được chứa trong "chứa đựng"; Tôi cho rằng "trong" là một ứng cử viên ngắn gọn đáng kể trong bối cảnh này – hedgedandlevered
Có lẽ với việc bổ sung thêm các '%' -giá trị. Từ 'in' là một từ dành riêng trong R sử dụng trong xây dựng vòng lặp. –