Trong matlab có một cách để tìm các giá trị trong một vectơ nhưng không phải trong vectơ kia.
ví dụ:
x <- c(1,2,3,4)
y <- c(2,3,4)
có chức năng nào cho tôi biết rằng giá trị trong x
đó không phải y
là 1 không?
Trong matlab có một cách để tìm các giá trị trong một vectơ nhưng không phải trong vectơ kia.
ví dụ:
x <- c(1,2,3,4)
y <- c(2,3,4)
có chức năng nào cho tôi biết rằng giá trị trong x
đó không phải y
là 1 không?
Câu trả lời:
Đúng. Đối với vectơ, bạn có thể chỉ cần sử dụng %in%
toán tử hoặc is.element()
hàm.
> x[!(x %in% y)]
1
Đối với một ma trận, có nhiều cách tiếp cận khác nhau. merge()
có lẽ là thẳng tiến nhất. Tôi đề nghị xem xét câu hỏi này cho kịch bản đó .
Tệp trợ giúp trong R cho setdiff, union, giao nhau, setequal và is.element cung cấp thông tin về các hàm bộ tiêu chuẩn trong R.
setdiff(x, y)
trả về các phần tử x
không có trong y
.
Như đã nói ở trên, đó là một sự khác biệt không đối xứng. Ví dụ:
> x <- c(1,2,3,4)
> y <- c(2,3,4,5)
>
> setdiff(x, y)
[1] 1
> setdiff(y, x)
[1] 5
> union(setdiff(x, y), setdiff(y, x))
[1] 1 5
x[is.na(match(x,y))]
setdiff()
là một hàm phức tạp vì đầu ra phụ thuộc vào thứ tự của đầu vào. Thay vào đó, bạn có thể viết một hàm đơn giản như vậy hoàn toàn ngược lại với intersect
. Điều này tốt hơn nhiều.
>difference <- function(x, y) {
c(setdiff(x, y), setdiff(y, x))
}
#Now lets test it.
>x <- c(1,2,3,4)
>y <- c(2,3,4,5)
>difference(x,y)
[1] 1 5
Nếu:
x <- c(1,2,3,4)
y <- c(2,3,4)
Bất kỳ biểu thức nào sau đây:
setdiff(x, y)
x[!(x %in% y)]
x[is.na(match(x,y))]
x[!(is.element(x,y))]
sẽ cung cấp cho bạn câu trả lời đúng [1] 1
, nếu mục tiêu là tìm các giá trị / ký tự trong x
, giá trị đó không có trong y
.
Tuy nhiên, việc áp dụng các biểu thức trên có thể phức tạp và có thể cho kết quả không mong muốn tùy thuộc vào bản chất của vectơ, và vị trí của x và y trong biểu thức. Ví dụ, nếu:
x <- c(1,1,2,2,3,4)
y <- c(2,3,4)
và mục tiêu chỉ là tìm các giá trị / ký tự duy nhất trong x
đó không có trong y
hoặc ngược lại. Áp dụng bất kỳ biểu thức nào sau đây sẽ vẫn cho câu trả lời đúng [1] 1
:
union(setdiff(x, y), setdiff(y, x))
Cảm ơn sự đóng góp của Jeromy Anglim
HOẶC LÀ:
difference <- function(x, y) {
c(setdiff(x, y), setdiff(y, x))
}
difference(y,x)
Cảm ơn sự đóng góp của Workhouse
setdiff(x,y)
vàsetdiff(y,x)
không giống nhau.