Подтвердить что ты не робот

Удалить строки, существующие в другом кадре данных?

У меня есть два следующих кадра данных (пример):

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

Я хотел бы удалить строки в df1, для которых df1$name = df2$name, чтобы получить следующее:

Вывод:

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

Если бы кто-нибудь мог сказать мне, какая часть кода для его использования была бы очень полезной, сначала казалось бы простой, но я уже возился с ней вчера.

4b9b3361

Ответ 1

Вам нужен оператор %in%. Итак,

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

должен предоставить вам то, что вы хотите.

  • df1$name %in% df2$name проверяет, находятся ли значения в df1$name в df2$name
  • Оператор ! меняет результат.

Ответ 2

Это иногда называют anti-join:

library(dplyr)
anti_join(df1, df2, by = "name")

Ответ 3

df1 [! (as.character(df1 $jobId)% in% as.character(df2 $jobId)),]

Мне пришлось добавить as.charaacter в мое исполнение, потому что JobID не является символом и фактором вместо этого, а не% in%, который должен был преобразовать это непосредственно