r - 动态选择数据框中的行

标签 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 中也有可能吗?

预先感谢您的任何建议。

最佳答案

如果我们使用子集,那么我们需要evaluate

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 - 动态选择数据框中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48074190/

相关文章:

python - PySpark Dataframe 根据其他列中的重复值识别一列上的不同值

delphi - 即使子类定义了抽象函数,为什么我也会收到抽象错误?

r - 如何更改 r shinydashboard 中数据表中列的对齐方式?

css - 如何抑制 Shiny 图像的抗锯齿?

r - 按组进行条件子集化

python - 使用 [key :value] combination in Python 将多列合并为一个列列表

r - 将 ggplot 保存在列表中给出了相同的图表

r - 合并R中具有不同行长的多个data.frames

swift - UItableViewCell 中的动态 Tableview

java - 如何动态设置函数参数的类?