In matlab c'è un modo per trovare i valori in un vettore ma non nell'altro.
per esempio:
x <- c(1,2,3,4)
y <- c(2,3,4)
c'è qualche funzione che mi direbbe che il valore in xche non yè in è 1?
In matlab c'è un modo per trovare i valori in un vettore ma non nell'altro.
per esempio:
x <- c(1,2,3,4)
y <- c(2,3,4)
c'è qualche funzione che mi direbbe che il valore in xche non yè in è 1?
Risposte:
Sì. Per i vettori puoi semplicemente usare l' %in%operatore o la is.element()funzione.
> x[!(x %in% y)]
1
Per una matrice, ci sono molti approcci differenti. merge()è probabilmente il più semplice. Suggerisco di esaminare questa domanda per quello scenario .
Il file della guida in R per setdiff, union, intersect, setequal e is.element fornisce informazioni sulle funzioni degli insiemi standard in R.
setdiff(x, y)restituisce gli elementi xche non sono in y.
Come notato sopra, è una differenza asimmetrica. Quindi per esempio:
> 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()è una funzione complicata perché l'output dipende dall'ordine dell'input. Puoi invece scrivere una semplice funzione in quanto tale che fa l'esatto opposto di intersect. Questo è molto meglio.
>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
Se:
x <- c(1,2,3,4)
y <- c(2,3,4)
Ognuna di queste espressioni:
setdiff(x, y)
x[!(x %in% y)]
x[is.na(match(x,y))]
x[!(is.element(x,y))]
ti darà la risposta giusta [1] 1, se l'obiettivo è trovare i valori / caratteri in x, che non è presente iny .
Tuttavia, l'applicazione delle espressioni di cui sopra può essere complicato e può dare risultati indesiderabili a seconda della natura del vettore e della posizione di x e y nell'espressione. Ad esempio, se:
x <- c(1,1,2,2,3,4)
y <- c(2,3,4)
e l'obiettivo è solo quello di trovare i valori / caratteri univoci in x, che non è presente in yo viceversa. L'applicazione di una qualsiasi di queste espressioni darà comunque la risposta giusta [1] 1:
union(setdiff(x, y), setdiff(y, x))
Grazie al contributo di Jeromy Anglim
O:
difference <- function(x, y) {
c(setdiff(x, y), setdiff(y, x))
}
difference(y,x)
Grazie al contributo di Workhouse
setdiff(x,y)esetdiff(y,x)non sono la stessa cosa.