[英]Select all columns except one in R sqldf package
在 R 中有沒有辦法使用sqldf
包來選擇除一列之外的所有列?
您根據某個查詢調用sqldf
應返回一個數據框,其中每個 DF 列對應於出現在 SQL 查詢的 select 子句中的列之一。 考慮以下示例:
sql <- "SELECT * FROM yourTable WHERE <some conditions>"
df <- sqldf(sql)
drop <- c("some_column")
df <- df[, !(names(df) %in% drop)]
請注意,在上面我正在執行SELECT *
以獲取表中的所有列(我假設是您的用例)。 然后我從結果數據框中對列some_column
進行子集化。
請注意,從SQL這樣做直接通常是不可能的。 也就是說,一旦你執行了SELECT *
,貓就出局了,你最終得到了所有的列。
1) SQLite使用默認的 SQLite 后端,假設我們要返回mtcars
除cyl
列之外的所有列的前 3 行。 首先為所有這些列名創建一個逗號分隔的字符串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
不返回任何內容,因此我們添加了一個select
來返回更改后的表。
library(RH2)
library(sqldf)
sqldf(c("alter table mtcars drop column cyl",
"select * from mtcars limit 3"))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.