【问题标题】:How do I use data.table completely with variables?如何将 data.table 完全与变量一起使用?
【发布时间】:2021-01-09 03:34:26
【问题描述】:

我有一个关于将变量作为输入的 data.table 语法的问题。 举个例子,我使用的是 data.table intro (https://cran.r-project.org/web/packages/data.table/vignettes/datatable-intro.html) 使用的标准数据集。

input <- if (file.exists("flights14.csv")) {
   "flights14.csv"
} else {
  "https://raw.githubusercontent.com/Rdatatable/data.table/master/vignettes/flights14.csv"
}
flights <- fread(input)

变量作为输入的使用非常简短,但没有达到我需要的程度。如何从 data.table 介绍中获取(稍作修改)示例

ans <- flights[carrier == "AA" & month == 6L,
        .(mean(arr_delay), mean(dep_delay)),
        by = .(origin, dest, month)]
ans

完全带有任意变量,例如

var1 = c("carrier", "month")
var2 = c("AA",6L)
var3 = c(mean,mean)
var4 = c("arr_delay", "dep_delay")
var5 = c("origin","dest","month")

?

我想获得与ans 相同的输出,但结果应仅取决于var1var5 以及by.()== 等运算符。 我一直在尝试使用..variwith=F 甚至get(vari) 的各种组合,但没有得到我想要的结果。

【问题讨论】:

  • 你可能想安装这个开发分支,旨在让你的用例更容易:github.com/Rdatatable/data.table/pull/4304
  • 感谢您的链接,看起来很有希望,我希望它很快就会被添加到 master 中。
  • 随意尝试并添加反馈!

标签: r data.table


【解决方案1】:

这是一种方法:

library(data.table)
#filter the rows based where var1 and var2 is true
tmp <- flights[rowSums(sweep(flights[, ..var1], 2, var2, `==`)) == length(var1)]
#apply var3 functions on var4 columns group by var5 columns
ans1 <- tmp[, Map(function(x, y) x(y), var3, .SD), .SDcols = var4, by = var5]
#Check the answer
identical(ans, ans1)
#[1] TRUE

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-01
    相关资源
    最近更新 更多