Digamos que eu tenha estes dados:
library(dplyr)
df1 <- data.frame(x = c(1, 2, 3, 4), z = c("A", "A", "B", "B"))
df2 <- data.frame(x = c(2, 4, 6, 8), z = c("A", "A", "B", "C"))
Posso verificar facilmente se cada elemento de x
in df1
está presente em x
of df2
:
df1 <- df1 %>% mutate(present = x %in% df2$x)
Existe uma maneira fácil de fazer a mesma coisa (de preferência no tidyverse
), mas verificar apenas dentro do grupo?
Em outras palavras, para que uma observação em seja df1
, duas coisas devem ser verdadeiras: 1) o grupo ( ) em deve ser o mesmo que o grupo em e 2) o valor de em deve ser o mesmo que o valor em .present
TRUE
z
df2
df1
x
df2
df1
Então, somente a segunda observação ( 2
) seria TRUE
porque existe uma observação em df2
com um x
de 2
e um z
de A
. A última observação de x
seria FALSE
porque mesmo que haja um valor em df2
com valor 4
, esta observação está em grupo A
, não B
.
Uma abordagem com
inner_join
Editar, agora funciona com múltiplas correspondências e remove o uso de uma variável temporária
saída
Isso funciona nos seus dados de exemplo, embora pareça deselegante.
Criado em 2024-11-30 com reprex v2.1.1
Baseado em R podemos usar
match
.