Tengo los dos siguientes marcos de datos (ejemplo):

df1:

name    profile    type    strand
A       4.5        1       +
B       3.2        1       +
C       5.5        1       +
D       14.0       1       -
E       45.1       1       -
F       32.8       1       -
G       19.9       1       +

df2:

name
A
B
C
G

Me gustaría eliminar las filas en df1 para que df1$name = df2$name para obtener el siguiente:

De salida:

name    profile    type    strand
D       14.0       1       -
E       45.1       1       -
F       32.8       1       -

Si alguien me pudiera decir que la pieza de código a utilizar sería de mucha ayuda, parecía simple al principio, pero he estado jugara desde ayer.

InformationsquelleAutor biohazard | 2013-06-27

3 Comentarios

  1. 38

    Usted necesita el %in% operador. Así,

    df1[!(df1$name %in% df2$name),]

    debe darle lo que quiere.

    • df1$name %in% df2$name pruebas de si los valores en df1$name están en df2$name
    • La ! operador invierte el resultado.
    • Muchas gracias! ¿Tiene usted alguna idea de lo que debo hacer para que sea simétrica? Me di cuenta de que df1[!(df1$name %in% df2$name),] y df2[!(df2$name %in% df1$name),] me dan resultados diferentes…
    • ¿y si el nombre de la columna no es única ?
    • En un marco de datos, las columnas deben ser únicos.
    • Esto me ha ayudado mucho ahora. No sé si yo podría haber encontrado el %in% operador. No es realmente una cosa de búsqueda..
  2. 23

    Esto es a veces llamado un anti-únete a:

    library(dplyr)
    anti_join(df1, df2, by = "name")
  3. 1
    df1[!(as.character(df1$jobId) %in% as.character(df2$name)), ]

    He tenido que añadir as.character a mi la ejecución, debido name no es un personaje sino un factor de cambio. No %in% supone para convertir esta directamente?

Dejar respuesta

Please enter your comment!
Please enter your name here