【发布时间】: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 的信息,但我不确定这是否合理。
【问题讨论】:
-
为什么加载
dplyr?df[color=="green" & height>175]有什么问题?data.table在后台使用自动索引(优化操作,如==和%in%等),因此这些操作应该非常有效。您也可以自己设置密钥并执行二进制连接,例如setkey(df, color) ; df[J("green")]。尽管此操作仅在data.table设置辅助键之前的第一次运行时比仅==具有优势,然后您的代码将得到全面优化。 -
我按照您的建议更改了过滤器的代码。但是,这不是我的问题的重点;-(
标签: r filter data.table