Considérez ces deux data.tables, foo
et bar
.
foo <- data.table(id = c(1,2,3,4), f1 = c("a", "b", "c", "d"), f2 = c("a", "b", "c", "d"))
bar <- data.table(id = c(1,2,3,4), f1 = c("a", "a", "c", "d"), f2 = c("a", "b", "c", "e"))
foo
id f1 f2
1: 1 a a
2: 2 b b
3: 3 c c
4: 4 d d
bar
id f1 f2
1: 1 a a
2: 2 a b
3: 3 c c
4: 4 d e
Je sais que foo
et bar
ont une relation 1-1.
Je souhaiterais sélectionner les lignes de bar
telles que la ligne correspondante dans foo
a des valeurs différentes. Par exemple,
- id 1: les valeurs de
f1
etf2
sont les mêmes dansfoo
et bar, donc excluez celle-ci - id 2: la valeur de
f1
a changé ! incluez ceci dans le résultat - id 3: les valeurs de
f1
etf2
sont les mêmes dansfoo
et bar, donc excluez celle-ci - id 4: la valeur de
f2
a changé ! incluez ceci dans le résultat
Résultat Attendu
bar[c(2,4)]
id f1 f2
1: 2 a b
2: 4 d e
Ce que j'ai essayé
J'ai pensé qu'une jointure non-équi fonctionnerait bien ici.. Malheureusement, il semble que l'opérateur "différent de" ne soit pas supporté.?
foo[!bar, on = c("id=id", "f1!=f1", "f2!=f2")]
# Opérateurs invalides !=,!=. Seuls les opérateurs autorisés sont ==<=<>=>.
foo[!bar, on = c("id=id", "f1<>f1", "f2<>f2")]
# Plus d'un opérateur trouvé dans la déclaration 'on': f1<>f1. Veuillez spécifier un seul opérateur.