动态选择数据框中的行
Dynamic selection of rows in dataframe
我想在 R 中构建一个用户定义的函数,它允许用户选择数据帧(子集),然后进行某种 frequency/cross table。使用括号和一些 AND 和 OR 可以非常详细地选择。
函数的输入是选择标准,然后必须将其应用于数据框。我希望选择标准是一个字符串,它是用户定义函数的输入,这允许用户(在 R 中不太擅长)进行选择和 tables,而不必自己构建数据框.我尝试了几种方法,使用 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 中也有可能吗?
提前感谢您的任何建议。
如果我们使用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)
我想在 R 中构建一个用户定义的函数,它允许用户选择数据帧(子集),然后进行某种 frequency/cross table。使用括号和一些 AND 和 OR 可以非常详细地选择。
函数的输入是选择标准,然后必须将其应用于数据框。我希望选择标准是一个字符串,它是用户定义函数的输入,这允许用户(在 R 中不太擅长)进行选择和 tables,而不必自己构建数据框.我尝试了几种方法,使用 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 中也有可能吗?
提前感谢您的任何建议。
如果我们使用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)