仅当特定值不使用 r 时才绑定 table

Bind table only if specific value doesn't using r

是否可以仅在缺少特定值的情况下绑定行?

在这个例子中,我有一个 table,其中包含四个 ID 和一些值。每个 ID 都假设有一个对应的值 1-3。如您所见,table dat 中缺少其中一些值。要解决此问题,我想将 datdat2 绑定,但仅在 table dat 中缺少“值”列中的值的情况下。我怎样才能做到这一点?

明确地说,我总共只想要 12 行。因此,例如,ID 4 的值为 3 并且 cat_var table dat 中的“绿色”。相比之下,在 table dat2 中,ID 4 的值为 3 且 cat_var “red”。这意味着我不想绑定该行,因为在 table dat 中已经存在 ID 4 和值 3 的行。我希望我说清楚了。

library(tidyverse)

数据:

id <- c(rep(1:4,3))
value <- c(rep(1:3, each = 4))
dat <- data.frame(id, value)
dat2 <- dat
dat <- dat %>%
  slice(1, 3, 5, 6, 7, 8, 10, 12)
dat2$cat_var <- c(rep("orange", 5), rep("green", 5), rep("red", 2))
dat$cat_var <- c(rep("orange", 3), rep("green", 5))

想要的结果:

# A tibble: 12 x 3
      id value cat_var
   <int> <int> <chr>  
 1     1     1 orange 
 2     2     1 orange 
 3     3     1 orange 
 4     4     1 orange 
 5     1     2 orange 
 6     2     2 green  
 7     3     2 green  
 8     4     2 green  
 9     1     3 green  
10     2     3 green  
11     3     3 red    
12     4     3 green  
dat %>% bind_rows(dat2) %>% distinct(id, value, .keep_all = T) %>% 
  arrange(value, id)

结果:

   id value cat_var
1   1     1  orange
2   2     1  orange
3   3     1  orange
4   4     1  orange
5   1     2  orange
6   2     2   green
7   3     2   green
8   4     2   green
9   1     3   green
10  2     3   green
11  3     3     red
12  4     3   green

您不需要安排(只是为了获得与处理结果完全相同的数据帧)。

使用基础 R :

行绑定 datdat2 并使用 duplicated 保持唯一行。

result <- rbind(dat, dat2)
result <- result[!duplicated(result[, c('id', 'value')]), ]
result

#   id value cat_var
#1   1     1  orange
#2   3     1  orange
#3   1     2  orange
#4   2     2   green
#5   3     2   green
#6   4     2   green
#7   2     3   green
#8   4     3   green
#10  2     1  orange
#12  4     1  orange
#17  1     3   green
#19  3     3     red