Contenido principal

setdiff

Diferencia de dos conjuntos de datos

Descripción

C = setdiff(A,B) devuelve los datos de A que no están en B, sin repeticiones. C está ordenada.

  • Si A y B son tablas u horarios, setdiff devuelve las filas de A que no están en B. Para horarios, setdiff tiene en cuenta las horas de las filas para determinar la igualdad y ordena el horario de salida C según las horas de las filas.

ejemplo

C = setdiff(A,B,setOrder) devuelve C en un orden específico. setOrder puede ser 'sorted' o 'stable'.

ejemplo

C = setdiff(A,B,___,'rows') y C = setdiff(A,B,'rows',___) tratan cada fila de A y cada fila de B como entidades únicas y devuelven las filas de A que no están en B, sin repeticiones. Debe especificar A y B, y, de manera opcional, puede especificar setOrder.

La opción 'rows' no es compatible con arreglos de celdas, a menos que una de las entradas sea un arreglo categórico o un arreglo de fecha/hora.

[C,ia] = setdiff(___) también devuelve el vector de índices ia mediante cualquiera de las sintaxis anteriores.

  • Normalmente, C = A(ia).

  • Si se especifica la opción 'rows', C = A(ia,:).

  • Si A y B son tablas u horarios, C = A(ia,:).

ejemplo

[C,ia] = setdiff(A,B,'legacy') y [C,ia] = setdiff(A,B,'rows','legacy') conservan el comportamiento de la función setdiff de la versión R2012b y anteriores.

La opción 'legacy' no es compatible con arreglos categóricos, arreglos de fecha/hora, arreglos de duración, tablas u horarios.

ejemplo

Ejemplos

contraer todo

Defina dos vectores con valores en común.

A = [3 6 2 1 5 1 1]; 
B = [2 4 6];

Encuentre los valores de A que no están en B.

C = setdiff(A,B)
C = 1×3

     1     3     5

Defina dos tablas con filas en común.

A = table([1:5]',["A";"B";"C";"D";"E"],logical([0;1;0;1;0]))
A=5×3 table
    Var1    Var2    Var3 
    ____    ____    _____

     1      "A"     false
     2      "B"     true 
     3      "C"     false
     4      "D"     true 
     5      "E"     false

B = table([1:2:10]',["A";"C";"E";"G";"I"],logical(zeros(5,1)))
B=5×3 table
    Var1    Var2    Var3 
    ____    ____    _____

     1      "A"     false
     3      "C"     false
     5      "E"     false
     7      "G"     false
     9      "I"     false

Encuentre las filas de A que no están en B.

C = setdiff(A,B)
C=2×3 table
    Var1    Var2    Var3 
    ____    ____    _____

     2      "B"     true 
     4      "D"     true 

Defina dos vectores con valores en común.

A = [3 6 2 1 5 1 1]; 
B = [2 4 6];

Encuentre los valores de A que no están en B, así como el vector de índices ia, de forma que C = A(ia).

[C,ia] = setdiff(A,B)
C = 1×3

     1     3     5

ia = 3×1

     4
     1
     5

Defina una tabla, A, con el estatus de fumador, la edad y la altura de cinco personas.

A = table([true;true;false;true;false],[27;52;31;46;35],[74;68;64;61;64], ...
VariableNames=["Smoker" "Age" "Height"], ...
RowNames=["Sanchez" "Brown" "Wu" "Murphy" "Johnson"])
A=5×3 table
               Smoker    Age    Height
               ______    ___    ______

    Sanchez    true      27       74  
    Brown      true      52       68  
    Wu         false     31       64  
    Murphy     true      46       61  
    Johnson    false     35       64  

Defina una tabla, B, con las mismas variables que A.

B = table([false;true;false;false],[64;68;62;58],[31;47;35;23], ...
VariableNames=["Smoker" "Height" "Age"], ...
RowNames=["Smith" "Cheng" "Lee" "Jones"])
B=4×3 table
             Smoker    Height    Age
             ______    ______    ___

    Smith    false       64      31 
    Cheng    true        68      47 
    Lee      false       62      35 
    Jones    false       58      23 

Encuentre las filas de A que no están en B, así como el vector de índices ia, de forma que C = A(ia,:). Dos filas que tienen los mismos valores, pero nombres de fila diferentes, se consideran iguales. Por lo tanto, las filas para Wu, A(3,:), Smith y B(1,:) son iguales. La tabla de salida C no incluye ninguna de las filas. Las filas de C están ordenadas primero por Smoker y, luego, por Age.

[C,ia] = setdiff(A,B)
C=4×3 table
               Smoker    Age    Height
               ______    ___    ______

    Johnson    false     35       64  
    Sanchez    true      27       74  
    Murphy     true      46       61  
    Brown      true      52       68  

ia = 4×1

     5
     1
     4
     2

Defina dos matrices con filas en común.

A = [7 9 7; 0 0 0; 7 9 7; 5 5 5; 1 4 5];
B = [0 0 0; 5 5 5];

Encuentre las filas de A que no están en B, así como el vector de índices ia, de forma que C = A(ia,:).

[C,ia] = setdiff(A,B,'rows')
C = 2×3

     1     4     5
     7     9     7

ia = 2×1

     5
     1

Utilice el argumento setOrder para especificar el orden de los valores de C.

Especifique 'stable' o 'sorted' cuando el orden de los valores de C sea importante.

A = [3 6 2 1 5 1 1]; 
B = [2 4 6];
[C,ia] = setdiff(A,B,'stable')
C = 1×3

     3     1     5

ia = 3×1

     1
     4
     5

También puede especificar el orden 'sorted'.

 [C,ia] = setdiff(A,B,'sorted')
C = 1×3

     1     3     5

ia = 3×1

     4
     1
     5

Defina dos vectores que contengan NaN.

A = [5 NaN NaN]; 
B = [5 NaN];

Encuentre la diferencia de conjuntos de A y B.

C = setdiff(A,B)
C = 1×2

   NaN   NaN

setdiff trata los valores NaN como distintos.

Cree un arreglo de celdas de vectores de caracteres, A.

A = {'dog','cat','fish','horse'};

Cree un arreglo de celdas de vectores de caracteres, B, donde algunos de los vectores tengan un espacio en blanco final.

B = {'dog ','cat','fish ','horse'};

Encuentre los vectores de caracteres de A que no están en B.

[C,ia] = setdiff(A,B)
C = 1×2 cell
    {'dog'}    {'fish'}

ia = 2×1

     1
     3

setdiff trata el espacio en blanco final de los arreglos de celdas de vectores de caracteres como un carácter distinto.

Cree un vector de caracteres, A.

A = ['cat';'dog';'fox';'pig'];
class(A)
ans = 
'char'

Cree un arreglo de celdas de vectores de caracteres, B.

B={'dog','cat','fish','horse'};
class(B)
ans = 
'cell'

Encuentre los vectores de caracteres de A que no están en B.

C = setdiff(A,B)
C = 2×1 cell
    {'fox'}
    {'pig'}

El resultado, C, es un arreglo de celdas de vectores de caracteres.

class(C)
ans = 
'cell'

Use el indicador 'legacy' para conservar el comportamiento de setdiff de la versión R2012b y anteriores en su código.

Encuentre la diferencia de A y B con el comportamiento actual.

A = [3 6 2 1 5 1 1]; 
B = [2 4 6];
[C1,ia1] = setdiff(A,B)
C1 = 1×3

     1     3     5

ia1 = 3×1

     4
     1
     5

Encuentre la diferencia de A y B, y conserve el comportamiento heredado.

[C2,ia2] = setdiff(A,B,'legacy')
C2 = 1×3

     1     3     5

ia2 = 1×3

     7     1     5

Argumentos de entrada

contraer todo

Arreglos de entrada. Si especifica la opción 'rows', A y B deben tener el mismo número de columnas.

A y B deben pertenecer a la misma clase, con las siguientes excepciones:

  • logical, char y todas las clases numéricas pueden combinarse con arreglos double.

  • Los arreglos de cadenas pueden combinarse con vectores de caracteres y arreglos de celdas de vectores de caracteres.

  • Los arreglos categóricos pueden combinarse con escalares de cadena y vectores de caracteres.

  • Los arreglos de fecha/hora y de duración pueden combinarse con escalares de cadena y vectores de caracteres con formato para representar fechas y horas.

Existen requisitos adicionales para A y B en función del tipo de datos:

  • Si A y B son arreglos categóricos ordinales, deben tener los mismos conjuntos de categorías, incluyendo su orden. Si ni A ni B son ordinales, no es necesario que tengan los mismos conjuntos de categorías y la comparación se realiza con nombres de categorías. En este caso, las categorías de C constan de las categorías de A seguidas por las categorías de B que no están en A. Las categorías están en el mismo orden que en A y B, y el orden de las categorías se usa para ordenar C.

  • Si A y B son tablas u horarios, deben tener los mismos nombres de variables (pero no el mismo orden). Para las tablas, los nombres de fila se ignoran, por lo que dos filas que tienen los mismos valores, pero nombres diferentes, se consideran iguales. Para los horarios, las horas de las filas se tienen en cuenta, por lo que dos filas que tienen los mismos valores, pero horas diferentes, no se consideran iguales.

  • Si A y B son arreglos de fecha/hora, ambos arreglos deben especificar zonas horarias o no tener zonas.

A y B también pueden ser objetos con los siguientes métodos de clase:

  • sort (o sortrows para la opción 'rows')

  • eq

  • ne

Los métodos de las clases de los objetos deben ser coherentes entre sí. Estos objetos incluyen arreglos heterogéneos derivados de la misma clase raíz. Por ejemplo, A y B pueden ser arreglos de identificadores de objetos de gráficas.

Indicador de orden, especificado como 'sorted' o 'stable', indica el orden de los valores (o filas) de C.

IndicadorDescripción
'sorted'

Los valores (o filas) de C se devuelven en orden tal y como los devuelve sort.

Ejemplo

C = setdiff([4 1 3 2 5],[2 1],'sorted')
C =

     3     4     5

'stable'

Los valores (o filas) de C vuelven en el mismo orden que en A.

Ejemplo

C = setdiff([4 1 3 2 5],[2 1],'stable')
C =

     4     3     5

Tipos de datos: char | string

Argumentos de salida

contraer todo

Diferencia de A y B, devuelta como vector, matriz, tabla u horario. Si las entradas A y B son tablas u horarios, el orden de las variables en C es el mismo que el orden de las variables en A.

A continuación, se describe la forma de C cuando las entradas son vectores o matrices y cuando el indicador 'legacy' no está especificado:

  • Si no se especifica el indicador 'rows' y A es un vector fila, C es un vector fila.

  • Si no se especifica el indicador 'rows' y A no es un vector fila, C es un vector columna.

  • Si se especifica el indicador 'rows', C es una matriz que contiene las filas de A que no están en B.

  • Si todos los valores (o filas) de A también están en B, C es una matriz vacía.

La clase de C es la misma que la clase de A, a menos que:

  • A sea un arreglo de caracteres y B sea un arreglo de celdas de vectores de caracteres, en cuyo caso C es un arreglo de celdas de vectores de caracteres.

  • A sea un vector de caracteres, un arreglo de celdas de vectores de caracteres o una cadena y B sea un arreglo categórico, en cuyo caso C es un arreglo categórico.

  • A sea un arreglo de celdas de vectores de caracteres o un vector de caracteres único y B sea un arreglo de fecha/hora, en cuyo caso C es un arreglo de fecha/hora.

  • A sea un vector de caracteres o un arreglo de celdas de vectores de caracteres y B sea un arreglo de cadenas, en cuyo caso C es un arreglo de cadenas.

Índice a A, devuelto como un vector columna cuando no se especifica el indicador 'legacy'. ia identifica los valores (o filas) de A que no están en B. Si hay un valor (o fila) repetido que aparece exclusivamente en A, ia contiene el índice de la primera aparición del valor (o fila).

Sugerencias

  • Para encontrar la diferencia de conjuntos con respecto a un subconjunto de variables de una tabla u horario, puede utilizar el subíndice de columna. Por ejemplo, puede utilizar setdiff(A(:,vars),B(:,vars)), donde vars es un entero positivo, un vector de enteros positivos, un nombre de variable, un arreglo de celdas de nombres de variables o un vector lógico. También puede utilizar vartype para crear un subíndice que seleccione variables de un tipo especificado.

Capacidades ampliadas

expandir todo

Historial de versiones

Introducido antes de R2006a