Вы можете использовать c(setdiff(x, y), setdiff(y, x))
, но я думаю, что что-то вроде следующего даст вам более богатую информацию, которую вы можете изменять и извлекать более гибко:
# We need dplyr for `tibble`, `mutate`, and `%>%`
library(dplyr)
# Create some synthetic data.
all <- tibble(trials = 1:7)
mine <- tibble(accepted = c(1, 2, 3))
hers <- tibble(accepted = c(2, 5))
# Add logical TRUE for accepted and FALSE otherwise for each person, compare.
all <- all %>%
mutate(mine = trials %in% mine$accepted, # Accepted by me.
hers = trials %in% hers$accepted, # Accepted by her.
diff = (mine | hers) & !(mine & hers) # Accepted one of us.
)
#### OUTPUT ####
# A tibble: 7 x 4
trials me you diff
<int> <lgl> <lgl> <lgl>
1 1 TRUE FALSE TRUE
2 2 TRUE TRUE FALSE
3 3 TRUE FALSE TRUE
4 4 FALSE FALSE FALSE
5 5 FALSE TRUE TRUE
6 6 FALSE FALSE FALSE
7 7 FALSE FALSE FALSE
Все, что я сделал, это создал несколько логических векторовкоторые соответствуют TRUE
или FALSE
в зависимости от того, принял ли me
или you
это испытание, а затем обнаружил разницу, которая либо / или, но не обе.Чтобы просто получить значения, вы можете сделать что-то вроде all$trials[all$diff]
, которое возвращает 1 3 5
.
Я предпочитаю этот метод, потому что вы можете более легко расширить свою область.Например, вы можете использовать mine & hers
для получения соглашений и !mine & !hers
для получения испытаний, которые не были приняты.