我有两个共享所有列的数据集,并且我想对除其中两列之外的所有列进行反联接.

例如,我想做一些类似以下的事情:

library(dplyr)
df1 <- tibble(x = c("A", "B", "C"), y = c("X", "Y", "Z"), z = c(1, 2, 3),
              a = c(4, 5, 6))

df2 <- tibble(x = c("A", "D", "E"), y = c("X", "W", "R"), z = c(1, 5, 6),
              a = c(4, 7, 8))

df2 %>% anti_join(df1, join_by(-c(z, a)))
#> Error in `join_by()`:
#> ! Expressions must use one of: `==`, `>=`, `>`, `<=`, `<`, `closest()`,
#>   `between()`, `overlaps()`, or `within()`.
#> ℹ Expression 1 is `-c(z, a)`.

#> Backtrace:
#>      ▆
#>   1. ├─df2 %>% anti_join(df1, join_by(-c(z, a)))
#>   2. ├─dplyr::anti_join(., df1, join_by(-c(z, a)))
#>   3. ├─dplyr:::anti_join.data.frame(., df1, join_by(-c(z, a)))
#>   4. │ └─dplyr:::join_filter(...)
#>   5. │   └─dplyr:::is_cross_by(by)
#>   6. │     └─rlang::is_character(x, n = 0L)
#>   7. └─dplyr::join_by(-c(z, a))
#>   8.   └─dplyr:::parse_join_by_expr(exprs[[i]], i, error_call = error_call)
#>   9.     └─dplyr:::stop_invalid_top_expression(expr, i, error_call)
#>  10.       └─rlang::abort(message, call = call)

创建于2023-03-27,共reprex v2.0.2

那么,在连接中有tidy-select个变量的选项吗?或者,具体地说,通过除某些变量以外的所有变量调用联接.

推荐答案

df2列中删除不需要的列,而不是try 在join_by()中指定:

library(dplyr)

df2 %>%
  anti_join(select(df1, -c(z, a)))

# Joining with `by = join_by(x, y)`
# # A tibble: 2 × 4
#   x     y         z     a
#   <chr> <chr> <dbl> <dbl>
# 1 D     W         5     7
# 2 E     R         6     8

对于标准联接,如果您想丢弃df2$z$a,请执行相同的操作.否则,请使用rename_with()追加后缀:

df2 %>%
  full_join(
    rename_with(df1, \(x) paste0(x, ".df1"), c(z, a))
  )

# Joining with `by = join_by(x, y)`
# # A tibble: 5 × 6
#   x     y         z     a z.df1 a.df1
#   <chr> <chr> <dbl> <dbl> <dbl> <dbl>
# 1 A     X         1     4     1     4
# 2 D     W         5     7    NA    NA
# 3 E     R         6     8    NA    NA
# 4 B     Y        NA    NA     2     5
# 5 C     Z        NA    NA     3     6

R相关问答推荐

如果行和列名以相同的开头,将矩阵值设置为0

在R中查找每个组不同时间段的总天数

如何使用rmarkdown和kableExtra删除包含折叠行的表的第一列的名称

使用R中的Shapetime裁剪格栅文件

随机森林回归:下拉列重要性

用预测NLS处理R中生物学假设之上的误差传播

R for循环返回到先前值

删除列表中存储的数据帧内和数据帧之间的重复行

我正在努力用R计算数据集中的中值逐步距离

如何使用tryCatch执行语句并忽略警告?

找出二叉树中每个 node 在R中的深度?

2个Rscript.exe可执行文件有什么区别?

在数据帧列表上绘制GGPUP

WRS2包中带有bwtrim的简单ANOVA抛出错误

将统计检验添加到GGPUBR中的盒图,在R

`-`是否也用于数据帧,有时使用引用调用?

在生成打印的自定义函数中,可以通过变量将线型或 colored颜色 设置为NULL吗?

在shiny 表格中输入的文本在第一次后未更新

如何在R中的两列以上使用联合(&U)?

如何在GGPlot中控制多个图例和线型