在dplyr中过滤出特定的组,其中每个组都有多个键列

58wvjzkj  于 2023-07-31  发布在  其他
关注(0)|答案(1)|浏览(77)

我想做这样的事

set.seed(123)
df <- tibble(
  key1 = sample(5, 100, replace = TRUE),
  key2 = sample(5, 100, replace = TRUE),
  val = rnorm(100)
) |> group_by(key1, key2)

keysToDrop <- tibble(
  key1 = c(5, 2),
  key2 = c(3, 2)
)

df |>
  left_join(keysToDrop |> mutate(dropMe = TRUE), by = c("key1", "key2")) |>
  filter(is.na(dropMe))

字符串
在我的例子中,我有多个 Dataframe ,我想分别过滤,我也有我想删除的组键定义为一个单独的 Dataframe 。
上面的代码运行得很好,但我想知道是否有更直接的方法,在dplyr中专门为这个操作设计了一些功能。

mspsb9vt

mspsb9vt1#

听起来像是anti_join(),例如。

library(tidyverse)

set.seed(123)
df <- tibble(
  key1 = sample(5, 100, replace = TRUE),
  key2 = sample(5, 100, replace = TRUE),
  val = rnorm(100)
) |> group_by(key1, key2)

keysToDrop <- tibble(
  key1 = c(5, 2),
  key2 = c(3, 2)
)

output1 <- df |>
  left_join(keysToDrop |> mutate(dropMe = TRUE), by = c("key1", "key2")) |>
  filter(is.na(dropMe)) %>%
  select(-dropMe)

output2 <- df |>
  anti_join(keysToDrop)
#> Joining with `by = join_by(key1, key2)`

all.equal(output1, output2)
#> [1] TRUE

字符串
创建于2023-07-27带有reprex v2.0.2

相关问题