【问题标题】:File organization - how to handle different combinations of filters on one data.frame efficiently?文件组织 - 如何有效地处理一个 data.frame 上的不同过滤器组合?
【发布时间】:2015-05-16 00:01:38
【问题描述】:

我目前在 R 中进行了大量描述性分析。我总是使用像 df 这样的 data.table

net <- seq(1,20,by=2)
gross <- seq(2,20,by=2)
color <- c("green", "blue", "white")
height <- c(170,172,180,188)

library(data.table)
df <- data.table(net,gross,color,height)

为了获得结果,我确实应用了很多过滤器。 有时我使用一个过滤器,有时我使用多个过滤器的组合,例如:

df[color=="green" & height>175]

在我的真实 data.table 中,我有 7 列和各种过滤器组合。 由于我总是处理相同的 data.table,因此我想找到最有效的方法来过滤数据。

到目前为止,我的文件是这样组织的(自下而上):

  • 执行级别:具有非常具体的工作(它们之间没有交互)的多个 R 脚本,使用 XL Connect 计算结果并将结果写入 excel 文件
  • 源文件:该文件接收预先过滤的 data.table 并从执行级别获取所有文件。如果我在执行级别添加/删除文件,这是必要的。
  • 过滤文件:读取 data.table 并应用一个或多个过滤器,如上图df_green_high 所示。通过过滤,过滤文件创建一个 新的 data.table 并使用这个新的过滤表获取“源文件”。

我目前面临挑战,因为我的过滤器文件太多。有7个变量,filter的组合这么多,我迟早会迷路的。

  • 如何更有效地进行分析(减少“过滤文件”的数量?)

  • 如何根据使用的过滤器方便地命名导出的文件?

我已经阅读了Workflow for statistical analysis and report writing 和其他一些类似的问题。但是,在这种情况下,我总是引用同一个基本表,所以应该有一个更有效的方法。我没有CS背景,因此非常感谢任何帮助。在 SOF 上,我还阅读了有关创建 package 的信息,但我不确定这是否合理。

【问题讨论】:

  • 为什么加载dplyrdf[color=="green" &amp; height&gt;175] 有什么问题? data.table 在后台使用自动索引(优化操作,如 ==%in% 等),因此这些操作应该非常有效。您也可以自己设置密钥并执行二进制连接,例如setkey(df, color) ; df[J("green")]。尽管此操作仅在 data.table 设置辅助键之前的第一次运行时比仅 == 具有优势,然后您的代码将得到全面优化。
  • 我按照您的建议更改了过滤器的代码。但是,这不是我的问题的重点;-(

标签: r filter data.table


【解决方案1】:

我通常这样做:

  • 创建一个名为“my_case_list”的列表
  • 过滤数据,对过滤后的数据进行计算
  • 为每个过滤的数据集添加一个名为“case”的列。用一些字符串填充此列,即“case 1: color=="green" & height>175"
  • 将此数据放入 my_case_list
  • 将列表转换为类似对象的 data.frame
  • 将结果导出到 sql server
  • 将结果从 sql server 导入 Excel 数据透视表
  • 理解结果

尽可能自动化流程。

【讨论】:

    猜你喜欢
    • 2017-08-16
    • 1970-01-01
    • 1970-01-01
    • 2011-01-16
    • 1970-01-01
    • 1970-01-01
    • 2021-01-27
    • 2015-08-05
    • 1970-01-01
    相关资源
    最近更新 更多