标签: sqldf

使用sqldf将巨大的csv文件读入R中,但是sqlite文件需要两倍的空间,需要"吸尘"

阅读时,我发现读取大于内存的csv文件的最佳方法是read.csv.sql从包中使用sqldf.该函数将数据直接读入sqlite数据库,从而执行sql语句.

我注意到以下内容:似乎读入sqlite的数据存储在一个临时表中,因此为了使其可供以后使用,需要在sql语句中这样询问.

作为示例,以下代码将一些示例数据读入sqlite:

# generate sample data
sample_data <- data.frame(col1 = sample(letters, 100000, TRUE), col2 = rnorm(100000))
# save as csv
write.csv(sample_data, "sample_data.csv", row.names = FALSE)
# create a sample sqlite database
library(sqldf)
sqldf("attach sample_db as new") 
# read the csv into the database and create a table with its content
read.csv.sql("sample_data.csv", sql = "create table data as select * from file", 
             dbname = "sample_db", header = T, row.names = F, sep = ",")
Run Code Online (Sandbox Code Playgroud)

然后可以使用访问数据sqldf("select …

sqlite r sqldf

6
推荐指数
1
解决办法
4570
查看次数

如何使用sqldf保持R格式的日期?

如何在不更改格式的情况下重命名SQLDF中的日期字段?

请参阅下面的示例,其中我的重命名日期字段"dt"将日期转换为数字.我该如何避免这种情况,或将其转换回日期?

#Question for Stack Exchange
df <- data.frame (date = c("2014-12-01","2014-12-02","2014-12-03"),
            acct = c(1,2,3))

df$date = as.Date(df$date)

library("sqldf")
sqldf('
    select 
        date as dt,
        date,
        acct
    from df ')


     dt       date acct
1 16405 2014-12-01    1
2 16406 2014-12-02    2
3 16407 2014-12-03    3
Run Code Online (Sandbox Code Playgroud)

r date sqldf

6
推荐指数
1
解决办法
3088
查看次数

在sqldf语句中应用CASE WHEN来操作多个列

我有一个datwe37列的数据框.我有兴趣将第23到35列中的整数值(1,2,99)转换为字符值('是','否','NA').

datwe$COL23 <- sqldf("SELECT CASE COL23 WHEN 1 THEN 'Yes'
                                        WHEN 2 THEN 'No'
                                        WHEN 99 THEN 'NA'
                                   ELSE 'Name ittt' 
                              END as newCol
                              FROM datwe")$newCol
Run Code Online (Sandbox Code Playgroud)

我一直在使用上面的sqldf语句分别转换每一列.我想知道是否有其他智能方法可以做到这一点,也许应用功能?

如果您需要任何可重现的数据来构建数据帧datwe,我将在此处添加它.谢谢.

编辑:示例 datwe

set.seed(12)
data.frame(replicate(37,sample(c(1,2,99),10,rep=TRUE)))
Run Code Online (Sandbox Code Playgroud)

r apply dataframe sqldf

6
推荐指数
1
解决办法
2743
查看次数

使用pandas和sqldf获取此类表错误

我得到一个sqlite3.OperationalError:没有这样的表:Bills

我首先使用pandas调用我的数据帧,然后在我的查询中调用这些数据帧,这很好

import pandas as pd
from pandasql import sqldf

Bills = pd.read_csv("Bills.csv")
Accessorials = pd.read_csv("Accessorials.csv")

q = """
Select          
            CityStateLane, 
            Count(BillID) as BillsCount, 
            Sum(BilledAmount) as BillsSum, 
            Count(Distinct CarrierName) as NumberOfCarriers, 
            Avg(BilledAmount) as BillsAverage, 
            Avg(BilledWeight) as WeightAverage
From 
            Bills
Where 
            Direction = 'THIRD PARTY' 
Group by 
            CityStateLane
Order by 
            BillsCount DESC
"""

topCityStateLane = sqldf(q)
Run Code Online (Sandbox Code Playgroud)

然后,我使用另一个查询创建另一个数据框,但这会调用错误,说Bills不存在,即使我在上一个查询中成功使用它.

q = """
SELECT
         Bills.BillID as BillID,
         A2.TotalAcc as TotalAcc
FROM
            (SELECT
                    BillID_Value,
                    SUM(PaidAmount_Value) as "TotalAcc"
            FROM  
                    Accessorials 
            GROUP BY
                    BillID_Value 
            ) AS  A2, …
Run Code Online (Sandbox Code Playgroud)

python sql dataframe pandas sqldf

6
推荐指数
1
解决办法
867
查看次数

R在多个标准上交叉data.frame

我试图基于多个条件上的两个data.frames的交集来填充二进制向量.

我有代码工作,但我觉得只是为了得到二进制矢量是内存过多.

当我将我的代码应用于我的完整数据(40毫米+行)时.我开始有记忆问题.

是否有更简单的方法来生成向量?

以下是一些样本数据(例如,子样本仅包括完整样本中的obs.):

ob1_1 <- as.data.frame(cbind(c(1999),c("111","222","666","777")),stringsAsFactors=FALSE)
ob2_1 <- as.data.frame(cbind(c(2000),c("111","333","555","777")),stringsAsFactors=FALSE)
ob3_1 <- as.data.frame(cbind(c(2001),c("111","222","333","777")),stringsAsFactors=FALSE)
ob4_1 <- as.data.frame(cbind(c(2002),c("111","444","555","777")),stringsAsFactors=FALSE)

full_sample <-  rbind(ob1_1,ob2_1,ob3_1,ob4_1)
colnames(full_sample) <- c("yr","ID")

ob1_2 <- as.data.frame(cbind(c(1999),c("111","222","777")),stringsAsFactors=FALSE)
ob2_2 <- as.data.frame(cbind(c(2000),c("333")),stringsAsFactors=FALSE)
ob3_2 <- as.data.frame(cbind(c(2001),c("888")),stringsAsFactors=FALSE)
ob4_2 <- as.data.frame(cbind(c(2002),c("111","444","555","777")),stringsAsFactors=FALSE)

sub_sample <-  rbind(ob1_2,ob2_2,ob3_2,ob4_2)
colnames(sub_sample) <- c("yr","ID")
Run Code Online (Sandbox Code Playgroud)

这是我的工作代码:

q_intersect <- ""
q_intersect <- paste(q_intersect , "select       a.yr, a.ID       ", sep=" ")
q_intersect <- paste(q_intersect , "from         full_sample a  ", sep=" ")
q_intersect <- paste(q_intersect , "intersect                     ", sep=" ")
q_intersect <- paste(q_intersect , "select       b.yr, b.ID …
Run Code Online (Sandbox Code Playgroud)

memory r intersect sqldf

5
推荐指数
1
解决办法
2425
查看次数

动物园里的动物:我们可以通过ID聚合每日时间序列因子和标记活动吗?

假设多年来动物园里每天都有动物活动的时间序列.非常大的数据集的子集可能如下所示:

library(data.table)
type <- c(rep('giraffe',90),rep('monkey',90),rep('anteater',90))
status <- as.factor(c(rep('display',31),rep('caged',28),rep('display',31),
rep('caged',25), rep('display',35),rep('caged',30),rep('caged',10),
rep('display',10),rep('caged',10),rep('display',60)))
date <- rep(seq.Date( as.Date("2001-01-01"), as.Date("2001-03-31"), "day" ),3)
Run Code Online (Sandbox Code Playgroud)

"类型"是动物类型,"状态"是动物当天所做事情的指示,例如,笼养或展示.

animals <-  data.table(type,status,date);animals
         type  status       date
  1:  giraffe display 2001-01-01
  2:  giraffe display 2001-01-02
  3:  giraffe display 2001-01-03
  4:  giraffe display 2001-01-04
  5:  giraffe display 2001-01-05
 ---                            
266: anteater display 2001-03-27
267: anteater display 2001-03-28
268: anteater display 2001-03-29
269: anteater display 2001-03-30
270: anteater display 2001-03-31
Run Code Online (Sandbox Code Playgroud)

假设我们想要将其汇总到月度系列中,该系列列出了动物的整个月状态信息.在新系列中,"状态"反映了该月初动物的状态."fullmonth"是一个二进制变量(1 = TRUE,0 = FALSE),表示此状态是否持续整个月,"anydisp"是否为二进制变量(1 = TRUE,0 = FALSE),表示动物是否开启在一个月内的任何时间显示(> = 1天).因此,因为长颈鹿在1月和3月的整个月展出,但在2月份被关在笼子里,因此得到了相应的标记.

date <- rep(seq.Date( …
Run Code Online (Sandbox Code Playgroud)

r zoo sqldf data.table

5
推荐指数
1
解决办法
278
查看次数

R 卡在加载 sqldf 包中

我一直在尝试在 R 中使用 sqldf 包,但它只是在加载所需的包“proto”时停止。像这样:

库(sqldf)
加载所需的包:DBI
加载所需的包:gsubfn
加载所需的包:proto

我正在使用 R 版本 3.0.0 (2013-04-03)——“Masked Marvel”。有人可以让我知道这里缺少什么吗?多谢!

r sqldf proto

5
推荐指数
0
解决办法
3325
查看次数

RODBC:合并来自不同数据库的表(频道)

我正在使用RODBC软件包从R连接到Oracle数据库但是我没有成功地合并来自不同数据库的表而没有"下载"表格(我不想下载它们因为它们太大了!).我想使用类似的东西:

DBa=odbcConnect(dsn="DatabaseA",uid="uid",pwd="pwd",readOnly="True")
DBb=odbcConnect(dsn="DatabaseB",uid="uid",pwd="pwd",readOnly="True")
sqldf("select a.year, sum(b.var) as sumVar
       from sqlFetch(DBa,'tableA') a
            sqlFetch(DBb,'tableB') b
       where a.ID=b.ID
       group by a.year")
Run Code Online (Sandbox Code Playgroud)

如果有人有想法,那将非常有帮助!提前谢谢了.

莱昂内尔

sql r rodbc sqldf

5
推荐指数
1
解决办法
1771
查看次数

sqldf:从数据框错误创建表:"没有这样的表".并创建了两个表而不是一个

我最近升级了R,RSQLite和sqldf(以下版本).

一般:

sqldf('create table foo as select * from bar', db = 'test.db')
Run Code Online (Sandbox Code Playgroud)

应该在附加的sqlite数据库中创建一个名为'foo'的表,如果存在加载新表,则使用数据框'bar'.

相反,我得到一个'没有这样的表'错误,而且当我查看数据库时,创建了'foo'和'bar'表.

可重复的例子:

library(RSQLite)
library(sqldf)
mydb = 'test.db'
## remove file if it exists                                                                                                                                                                                       
system(paste('rm', mydb))
## open connection                                                                                                                                                                                                
##con <- dbConnect(SQLite(), dbname=mydb)                                                                                                                                                                         
system(paste('ls -l', mydb))
sqldf( paste0( 'attach "', mydb, '" as new' ) )
system(paste('ls -l', mydb))
class(mtcars)
sqldf( 'create table mycars as select * from mtcars', dbname = mydb )
sqldf('select * from sqlite_master', dbname = mydb)
sqldf('select * from main.mycars limit 1', dbname …
Run Code Online (Sandbox Code Playgroud)

r sqldf rsqlite

5
推荐指数
1
解决办法
3957
查看次数

R 使用 SQLDF 时出错:SQL 变量太多

我在 r 中有一个包含近 2000 个变量的大型数据集。然后我使用 sqldf 编写一些 case 语句来在原始数据集上创建新列。但是我收到以下错误:

 Error in rsqlite_send_query(conn@ptr, statement) : too many SQL variables
Run Code Online (Sandbox Code Playgroud)

我今天重新启动了我的笔记本电脑,以前这个错误从未发生过。

任何帮助表示赞赏。

r sqldf

5
推荐指数
1
解决办法
2550
查看次数

标签 统计

sqldf ×10

r ×9

dataframe ×2

sql ×2

apply ×1

data.table ×1

date ×1

intersect ×1

memory ×1

pandas ×1

proto ×1

python ×1

rodbc ×1

rsqlite ×1

sqlite ×1

zoo ×1