如何将列添加到monet.frame
- 对象?
E.g。如果我想向名为monet.frame
的{{1}}添加一个简单的行ID,我可以通过执行以下操作来实现:
data
但必须有一个不那么黑客的方式。
如果您按照上面给出的方式执行此操作,例如,当您执行from <- gsub("^SELECT(.)+FROM", "", data$query)
addid_query <- gsub("data", from,
"SELECT *, ROW_NUMBER() OVER () AS id FROM data"
attr(data, "query") <- addidquery
或id
时,新创建的str(data)
- 列不会显示,因为该信息在底层数据库更改---它是在names(data)
初始化时生成的,而不是在调用这些acessor函数时生成的。它直接访问data
行时会显示,因为查询会按照写入执行。
上面的东西还能安全吗?
更一般地说,我需要对我的data
做一些超出包中可用功能的事情,并且有兴趣知道如何在{{{{{}上运行更一般的SQL查询1}},类似于monet.frame
&#39; s monet.frame
- 函数允许的内容。我很欣赏这方面的任何指示 - 我是否必须使用dplyr
等,并将其结果转换为新的sql()
?怎么样?
编辑:
NEVERMIND,应该更仔细地阅读本手册,我没有看到dbSendQuery
接受可以解释为SQL查询的字符串以及已经在数据库中的表名。
这就是我现在要做的事情:
monet.frame
编辑2:如果应用于由monet.frame
创建的#' Apply general SQL queries to a monet.frame object and return the
#' result in a new monet.frame.
#'
#' @param data a \code{monet.frame} object
#' @param query an SQL query, using "_DATA_" as the placeholder for the
#' name of the table underlying the \code{data}-object.
transform.monet.frame <- function(data, query){
nm <- paste(sample(letters, 15, rep=TRUE), collapse="")
query <- gsub("_DATA_", paste("(", attr(data, "query"), ") AS", nm), query)
monet.frame(attr(data, "conn"), query)
}
newdata <- transform(data,
"SELECT *, ROW_NUMBER() OVER () AS id FROM _DATA_")
并且涉及ORDER,LIMIT或OFFSET语句的查询,则会中断。