如何输出2列之间的差异

时间:2019-05-23 15:50:19

标签: r

我正在尝试将我的临床数据集与另一个用于质量控制的数据集进行比较。我们有1栏用于接受的试验。但是,有时我们不接受相同的审判。我想比较接受的试验,并在新栏中强调我们中的任何一个都不接受/包括的试验。

我接受1,2,3 她接受2,5

输出: 接受的差异: 我接受了1,3 她接受了5

2 个答案:

答案 0 :(得分:3)

在R中执行此操作的最基本方法是使用setdiff(mine, hers)(知道我接受了她没有接受的哪些试验)和setdiff(hers, mine)(知道她接受了我不接受的哪些试验) )。

这假设数据如下:

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

这可以解决您的问题吗?

如果格式和其他详细信息对您的问题至关重要,则可以考虑提供示例数据。这个问题肯定有很多解决方案。

答案 1 :(得分:0)

您可以使用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

我所做的就是根据TRUEFALSE是否接受了该审判,创建了一些与meyou对应的逻辑向量,然后发现差异,这是非此即彼的结果,但并非两者兼而有之。要获取值,您可以执行类似all$trials[all$diff]的操作,该操作返回1 3 5

我更喜欢这种方法,因为您可以更轻松地扩大范围。例如,您可以使用mine & hers获取协议,并使用!mine & !hers获取均未接受的试用。