【发布时间】:2017-03-09 08:12:36
【问题描述】:
我有一个自定义过滤器列表,我需要根据这些过滤器对我的数据框进行子集化。例如,对于 mtcars,我有这个列表:
filters=c(mpg>15, wt<2, carb>2 & am==0)
我想将此列表传递给包含 dplyr/pipes 的函数
fmean <- function(filter_x) mtcars %>% filter(filter_x) %>% summarise(mean(disp))
将列表传递给 fmean 后我的预期输出是:
subset mean(disp)
mpg>15 192
wt<2 80.2
carb>2 & am==0 324
如何获得上述输出?
编辑:感谢@alistaire 和其他在这里回复的人,找到了一个 tidyverse 解决方案:
library(tidyverse)
filters <- c("mpg > 15", "wt < 2", "carb > 2 & am==0")
fmean <- function(filter_x) { mtcars %>%
filter_(filter_x) %>%
summarise(mean(disp)) %>%
mutate(subset=filter_x) %>%
select(subset, everything()) }
filters %>% map_df(fmean)
输出:
subset mean(disp)
mpg>15 192.3
wt<2 80.2
carb>2 & am==0 324.5
【问题讨论】: