Ответ 1
Вам нужен оператор %in%
. Итак,
df1[!(df1$name %in% df2$name),]
должен предоставить вам то, что вы хотите.
-
df1$name %in% df2$name
проверяет, находятся ли значения вdf1$name
вdf2$name
- Оператор
!
меняет результат.
У меня есть два следующих кадра данных (пример):
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 -
Если бы кто-нибудь мог сказать мне, какая часть кода для его использования была бы очень полезной, сначала казалось бы простой, но я уже возился с ней вчера.
Вам нужен оператор %in%
. Итак,
df1[!(df1$name %in% df2$name),]
должен предоставить вам то, что вы хотите.
df1$name %in% df2$name
проверяет, находятся ли значения в df1$name
в df2$name
!
меняет результат.Это иногда называют anti-join:
library(dplyr)
anti_join(df1, df2, by = "name")
df1 [! (as.character(df1 $jobId)% in% as.character(df2 $jobId)),]
Мне пришлось добавить as.charaacter в мое исполнение, потому что JobID не является символом и фактором вместо этого, а не% in%, который должен был преобразовать это непосредственно