Как вывести разницу между 2 столбцами - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь сравнить мой клинический набор данных с другим для контроля качества. У нас есть 1 столбец для принятых испытаний. Однако иногда мы не принимаем одни и те же испытания. Я хочу сравнить принятые испытания и получить новую колонку, в которой выделены испытания, которые ни один из нас не принял / не включил.

Я принимаю 1,2,3 Она принимает 2,5

Выход: Допустимая разница: Я принял 1,3 Она приняла 5

Ответы [ 2 ]

3 голосов
/ 23 мая 2019

Самый простой способ сделать это в R - с помощью setdiff(mine, hers) (узнать, какие испытания я принял, а она нет) и setdiff(hers, mine) (узнать, какие испытания она приняла, а я нет).

Предполагается, что данные выглядят так:

mine <- c(1, 2, 3)
hers <- c(2, 5)

Это решит ваш вопрос?

Вы можете рассмотреть возможность предоставления образцов данных, если формат и другие детали имеют решающее значение для вашего вопроса. У этого вопроса, безусловно, есть множество решений.

0 голосов
/ 23 мая 2019

Вы можете использовать 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 для получения испытаний, которые не были приняты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...