dplyr筛选:数据框中的多个条件

3

我有一个数据框,其中包含所有的条件。

cond.df = data.frame(
  mpg = c(21,18.7,22.8),
  gear = c(4,3,2),
  carb = c(4,3,2)
)

首先,我希望得到一个筛选过的数据框,该数据框等同于以下内容:

mtcars %>% filter(mpg == 21, gear == 4, carb = 4)

我的期望输出是一个包含 n 个数据框的列表。
list(mtcars %>% filter(mpg == 21, gear == 4, carb = 4),
 mtcars %>% filter(mpg == 18.7, gear == 3, carb = 3),
 mtcars %>% filter(mpg == 22.8, gear == 2, carb = 2))

此外,如果可能的话,我希望能够解决从cond.df中未知列数的问题。
我知道如果只有一个变量,可以使用%in%,例如:
mtcars %>% filter(gear %in% c(3,4))

然而,我有不止一个变量。

谢谢

2个回答

2
我建议在cond.df上使用mtcarsinner_join。这样,它可以匹配cond.df中任意数量的变量。
我稍微修改了您的条件数据框,以便第二行和第三行实际匹配某些内容。
library(dplyr)
cond.df = data.frame(
    mpg = c(21,18.7,22.8),
    gear = c(4,3,4),
    carb = c(4,2,1)
)

这将创建一个数据框,其中每一行都包含过滤/连接后的数据框。
result <- 
    cond.df %>%
    rowwise() %>%
    do(
        dfs = inner_join(as.data.frame(.), mtcars)
    )

如果需要将其转换为数据框列表,只需进行转换。
as.list(result)$dfs

你可以使用 do.call(rbind.data.frame, result$dfs) 来将数据合并到一个数据框中,而不是使用 as.list(result)$dfs - sdittmar

0

你可以使用apply函数逐行遍历cond.df,然后使用匿名函数进行过滤:

apply(cond.df,1, function(x) mtcars %>% # the 1 is for row wise 
filter(mpg == x[1], gear == x[2], carb == x[3]))

谢谢您的回答,但我应该编辑问题。我想要一个在cond.df中具有未知列数的解决方案。 - chrk623

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接