动态选择数据框中的行

时间:2018-01-03 09:03:39

标签: r dataframe dynamic subset selection

我想在R中构建一个用户定义的函数,它允许用户对数据帧进行选择(子集),然后制作某种频率/交叉表。选择可以用括号和一些AND和OR来完成。

函数的输入是选择标准,然后必须将其应用于数据帧。我希望选择标准是一个字符串,它是用户定义函数的输入,这允许用户(在R中不太好的用户)进行选择和表,而不必费心自己构建数据帧。我尝试了几种方法,使用subset()df[[var_name]]等,但我不能让它们变得动态。理想情况如下:

# User makes a selection
selection <- '( age > 20 & gender == 'm' ) | age > 45'

# User applies it to the dataframe
subset(df , selection)

或者

df[ selection , ]

然而,这不起作用,但也许我错过了一些东西。或许还有另一种方法可以做到这一点。例如,在数据库中,您可以将查询构建为字符串,然后执行。变量可以包含在此查询构建部件中,以使其动态化。 R中还有可能吗?

提前感谢任何建议。

1 个答案:

答案 0 :(得分:2)

如果我们使用subset,那么我们需要eval uate

subset(df, eval(parse(text = selection)))

或者@Roland建议,而不是字符串输入,创建一个表达式,然后执行eval

selection <- expression(( age > 20 & gender == 'm' ) | age > 45)
subset(df, eval(selection))

数据

set.seed(42)
df <- data.frame(age = sample(10:60, 20, replace = TRUE),
  gender = sample(c('m', 'f'), 20, replace = TRUE), stringsAsFactors = FALSE)