我有一个包含所有条件的数据框。
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))
但是,我有多个变量。
谢谢
我建议在你的inner_join
上使用mtcars
的cond.df
。这样,它可以匹配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
您可以使用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]))