Select 除 R sqldf 包中的一列外的所有列
Select all columns except one in R sqldf package
在 R 中有没有一种方法可以使用 sqldf
包来 select 除一列之外的所有列?
您基于某些查询对 sqldf
的调用应该 return 一个数据框,其中每个 DF 列对应于您的 [=] 的 select 子句中出现的列之一25=]查询。考虑以下示例:
sql <- "SELECT * FROM yourTable WHERE <some conditions>"
df <- sqldf(sql)
drop <- c("some_column")
df <- df[, !(names(df) %in% drop)]
请注意,在上面我正在执行 SELECT *
来获取 table 中的所有列(我假设是您的用例)。然后,我从结果数据框中提取列 some_column
。
请注意,通常 不可能直接从 SQL 执行此操作。也就是说,一旦您执行了 SELECT *
,就万事大吉了,您最终得到了所有列。
1) SQLite 使用默认的 SQLite 后端,假设我们想要 return 所有列的前 3 行在 mtcars
中,cyl
列除外。首先创建一个包含所有此类列名称的逗号分隔字符串 sel
,然后使用 fn$sqldf
允许字符串插值在 SQL 语句中将其引用为 $sel
。如果要查看生成的 SQL 语句,请将 verbose=TRUE
参数添加到 sqldf
。
library(sqldf)
sel <- toString(setdiff(names(mtcars), "cyl"))
fn$sqldf("select $sel from mtcars limit 3")
给予:
mpg disp hp drat wt qsec vs am gear carb
1 21.0 160 110 3.90 2.620 16.46 0 1 4 4
2 21.0 160 110 3.90 2.875 17.02 0 1 4 4
3 22.8 108 93 3.85 2.320 18.61 1 1 4 1
2) H2 H2后端支持alter table ... drop column ...
所以我们可以这样写。由于 alter
没有 return 任何东西,我们添加了一个 select
,其中 return 改变了 table。
library(RH2)
library(sqldf)
sqldf(c("alter table mtcars drop column cyl",
"select * from mtcars limit 3"))
在 R 中有没有一种方法可以使用 sqldf
包来 select 除一列之外的所有列?
您基于某些查询对 sqldf
的调用应该 return 一个数据框,其中每个 DF 列对应于您的 [=] 的 select 子句中出现的列之一25=]查询。考虑以下示例:
sql <- "SELECT * FROM yourTable WHERE <some conditions>"
df <- sqldf(sql)
drop <- c("some_column")
df <- df[, !(names(df) %in% drop)]
请注意,在上面我正在执行 SELECT *
来获取 table 中的所有列(我假设是您的用例)。然后,我从结果数据框中提取列 some_column
。
请注意,通常 不可能直接从 SQL 执行此操作。也就是说,一旦您执行了 SELECT *
,就万事大吉了,您最终得到了所有列。
1) SQLite 使用默认的 SQLite 后端,假设我们想要 return 所有列的前 3 行在 mtcars
中,cyl
列除外。首先创建一个包含所有此类列名称的逗号分隔字符串 sel
,然后使用 fn$sqldf
允许字符串插值在 SQL 语句中将其引用为 $sel
。如果要查看生成的 SQL 语句,请将 verbose=TRUE
参数添加到 sqldf
。
library(sqldf)
sel <- toString(setdiff(names(mtcars), "cyl"))
fn$sqldf("select $sel from mtcars limit 3")
给予:
mpg disp hp drat wt qsec vs am gear carb
1 21.0 160 110 3.90 2.620 16.46 0 1 4 4
2 21.0 160 110 3.90 2.875 17.02 0 1 4 4
3 22.8 108 93 3.85 2.320 18.61 1 1 4 1
2) H2 H2后端支持alter table ... drop column ...
所以我们可以这样写。由于 alter
没有 return 任何东西,我们添加了一个 select
,其中 return 改变了 table。
library(RH2)
library(sqldf)
sqldf(c("alter table mtcars drop column cyl",
"select * from mtcars limit 3"))