簡體   English   中英

選擇R sqldf包中除一列之外的所有列

[英]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 后端,假設我們要返回mtcarscyl列之外的所有列的前 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM