r - 如何将 data.table 完全与变量一起使用?
问题描述
我对将变量作为输入的 data.table 语法有疑问。举个例子,我使用了 data.table 介绍(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")
?
我想获得与 with 相同的输出,ans
但结果应仅取决于var1
tovar5
和by
, .()
or之类的运算符==
。我一直在尝试使用..vari
或with=F
什至的各种组合,get(vari)
但没有得到我想要的结果。
解决方案
这是一种方法:
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
推荐阅读
- r - 指定顶点大小时 igraph 边缘消失
- sql-insert - SQL Server 2017 插入临时表变量非常慢,但在 2014 年没有
- sql - 使用子查询返回具有多个条件的聚合函数(总和)
- javascript - 处理 ViewChildren 的最佳 Angular 7 挂钩是什么
- c++ - 如何从 C++ 中的套接字中的线格式反序列化 int
- python - 如何在 Python 的同一循环中获取迭代器编号和元素?
- python - 如何让 python 使用我安装的最新 openssl 版本?
- python - 并行提交cmd时如何识别cmd失败?
- java - 如何遍历所有控件并在 Android 中获取其 id 和值?
- python - 无返回值?