如何解决选择R sqldf软件包中除一列以外的所有列
R中有没有一种方法可以使用sqldf
包来选择除一个以外的所有列?
解决方法
您基于某个查询对bash 5.0.11
的调用应返回一个数据帧,其中每个DF列对应于SQL查询的select子句中出现的列之一。考虑以下示例:
sqldf
在上面的注释中,我正在执行sql <- "SELECT * FROM yourTable WHERE <some conditions>"
df <- sqldf(sql)
drop <- c("some_column")
df <- df[,!(names(df) %in% drop)]
以获取表中的所有列(我认为这是您的用例)。然后,我从结果数据框中删除列SELECT *
的子集。
请注意,通常不可能直接从SQL直接执行此操作。也就是说,一旦您执行some_column
,猫就会从书包中脱颖而出,并且最终所有列都结束。
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"))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。