标签: sqldf

如何将几个大型data.table对象附加到单个data.table中并快速导出到csv而不会耗尽内存?

对此的简单回答是"购买更多内存",但我希望得到更具建设性的答案,并在此过程中学到一些东西.

我运行Windows 7 64位,内存为8GB.

我有几个非常大的.csv.gz文件(大约450MB未压缩),它们具有我读入R并执行一些处理的完全相同的标题信息.然后,我需要将处理过的R对象组合成一个主对象,并在磁盘上写回.csv.

我在多组文件上执行相同的操作.例如,我有5个文件夹,每个文件夹中包含6个csv.gz文件.我需要最终得到5个主文件,每个文件夹一个.

我的代码如下所示:

for( loop through folders ){
    master.file = data.table()

    for ( loop through files ) {
        filename = list.files( ... )
        file = as.data.table ( read.csv( gzfile( filename ), stringsAsFactors = F ))
        gc()

        ...do some processing to file...

        # append file to the running master.file
        if ( nrow(master.file) == 0 ) {
            master.file = file
        } else {
            master.file = rbindlist( list( master.file, file) )
        }
        rm( file, filename )
        gc()
    }

    write.csv( …
Run Code Online (Sandbox Code Playgroud)

memory csv r sqldf data.table

8
推荐指数
1
解决办法
1282
查看次数

以任何方式自动更正数据框中的所有变量类

我有一个约250个变量的数据框.不幸的是,所有这些变量都是从sql数据库中导入为字符类的sqldf.问题是:所有这些都不应该是字符类.有数字变量,整数,以及日期.我想构建一个运行在所有变量上的模型,为此我需要确保变量具有正确的类.一个接一个地做它可能是最好的,但仍然非常手动.

我怎么能自动纠正所有课程?也许是一种检测列中是否有字母字符或只有数字字符的方法?

我不认为自动方法可以完美地纠正所有课程.但它可能会纠正大多数类,然后是那些不好的类,我可以手动处理它们.

我正在添加一个sqldf标签,以防任何人在导入数据时知道如何纠正这个问题,但我认为这不是sqldf的错,而是数据库的错误.

sql database r sqldf

8
推荐指数
1
解决办法
122
查看次数

在R中选择表内行的快速方法?

我正在寻找一种从更大的表中提取大量行的快速方法.我的表顶部如下:

> head(dbsnp)

      snp      gene distance
rs5   rs5     KRIT1        1
rs6   rs6   CYP51A1        1
rs7   rs7 LOC401387        1
rs8   rs8      CDK6        1
rs9   rs9      CDK6        1
rs10 rs10      CDK6        1
Run Code Online (Sandbox Code Playgroud)

尺寸:

> dim(dbsnp)
[1] 11934948        3
Run Code Online (Sandbox Code Playgroud)

我想选择列表中包含rownames的行:

> head(features)
[1] "rs1367830" "rs5915027" "rs2060113" "rs1594503" "rs1116848" "rs1835693"

> length(features)
[1] 915635
Run Code Online (Sandbox Code Playgroud)

毫不奇怪,这样做的直接方式temptable = dbsnp[features,]需要相当长的时间.

我一直在研究如何通过R中的sqldf包来实现这一点.我认为这可能会更快.不幸的是,我无法弄清楚如何在SQL中选择具有某些rownames的行.

谢谢.

sql row r sqldf data.table

7
推荐指数
3
解决办法
2260
查看次数

从sqldf查询中调用R函数

有没有办法从sqldf查询中调用R函数?例如

sqldf("select paste('Hello', 'World')")
Run Code Online (Sandbox Code Playgroud)

或者,有没有办法在sqldf后面的SQLite引擎中定义自定义函数或存储过程?(我使用sqldf和普通的内存中的R数据帧;我没有连接到任何实际的数据库.)

sqlite r sqldf

7
推荐指数
1
解决办法
1514
查看次数

sqldf:按日期范围查询数据

我正在阅读一个具有'%d/%m/%Y'日期格式的巨大文本文件.我想使用sqldf的read.csv.sql来按日期同时读取和过滤数据.这是为了节省内存使用和跳过许多日期,我不是有意的运行时间.我知道如何的帮助下做到这一点dplyrlubridate,但我只是想尝试与sqldf通过前述的理由.尽管我对SQL语法非常熟悉,但它仍然在大部分时间里都是我,但也不例外sqldf.

像下面这样的运行命令返回了一个带有0行的data.frame:

first_date <- "2001-11-1"
second_date <- "2003-11-1"
query <- "select * from file WHERE strftime('%d/%m/%Y', Date, 'unixepoch', 'localtime') between
                    '$first_date' AND '$second_date'"
df <- read.csv.sql(data_file,
                       sql= query,
                       stringsAsFactors=FALSE,
                       sep = ";", header = TRUE)
Run Code Online (Sandbox Code Playgroud)

所以对于模拟,我尝试使用sqldf如下函数:

first_date <- "2001-11-1"
second_date <- "2003-11-1"
df2 <- data.frame( Date = paste(rep(1:3, each = 4), 11:12, 2001:2012, sep = "/"))
sqldf("SELECT * FROM df2 WHERE strftime('%d/%m/%Y', Date, 'unixepoch') BETWEEN '$first-date' AND '$second_date' …
Run Code Online (Sandbox Code Playgroud)

r sqldf

7
推荐指数
1
解决办法
9930
查看次数

在R中导入数据集时跳过元数据

我的问题涉及如何在将数据导入R时跳过文件开头的元数据.我的数据是.txt格式,其中第一行是描述数据的元数据,需要过滤掉这些数据.下面是制表符分隔格式的数据框的最小示例:

Type=GenePix Export                         
DateTime=2010/03/04 16:04:16                        
PixelSize=10                        
Wavelengths=635                     
ImageFiles=Not Saved                        
NormalizationMethod=None                        
NormalizationFactors=1                      
JpegImage=                      
StdDev=Type 1                       
FeatureType=Circular                        
Barcode=                        
BackgroundSubtraction=LocalFeature                      
ImageOrigin=150, 10                     
JpegOrigin=150, 2760                        
Creator=GenePix Pro 7.2.29.002                      
var1    var2    var3    var4    var5    var6    var7
1   1   1   molecule1   1F3 400 4020
1   2   1   molecule2   1B5 221 4020
1   3   1   molecule3   1H5 122 2110
1   4   1   molecule4   1D1 402 2110
1   5   1   molecule5   1F1 600 4020
Run Code Online (Sandbox Code Playgroud)

如果我知道实际数据的起始行,我可以使用下面显示的基本命令:

mydata <- read.table("mydata.txt",header=T, skip=15)
Run Code Online (Sandbox Code Playgroud)

哪个会回归;

mydata
  var1 var2 var3      var4 var5 var6 var7 …
Run Code Online (Sandbox Code Playgroud)

r sqldf

7
推荐指数
1
解决办法
301
查看次数

根据条件查找每行和最近的匹配项

考虑以下data.table事件:

library(data.table)
breaks <- data.table(id = 1:8,
                     Channel = c("NP1", "NP1", "NP2", "NP2", "NP3", "NP3", "AT4", "AT4"),
                     Time = c(1000, 1100, 975, 1075, 1010, 1080, 1000, 1050),
                     Day = c(1, 1, 1, 1, 1, 1, 1, 1),
                     ZA = c(15, 12, 4, 2, 1, 2, 23, 18),
                     stringsAsFactors = F)

breaks
   id Channel Time Day ZA
1:  1     NP1 1000   1 15
2:  2     NP1 1100   1 12
3:  3     NP2  975   1  4
4:  4     NP2 1075   1  2 …
Run Code Online (Sandbox Code Playgroud)

r sqldf data.table

7
推荐指数
1
解决办法
209
查看次数

解析"NA"字符串中的引号

我的数据框有一些变量,包含像字符串一样的缺失值"NA".解析包含这些列的数据帧中的所有列并将它们转换为由函数捕获的实际NA的最有效方法是什么is.na()

我使用sqldf来查询数据库.

可重复的例子:

vect1 <- c("NA", "NA", "BANANA", "HELLO")
vect2 <- c("NA", 1, 5, "NA")
vect3 <- c(NA, NA, "NA", "NA")


df = data.frame(vect1,vect2,vect3)
Run Code Online (Sandbox Code Playgroud)

r sqldf

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

使用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
查看次数

更新sqldf后在R中获取警告消息

我刚刚更新了所有R套餐,包括sqldf今天.然后我不断收到如下警告信息:

Warning message:
Quoted identifiers should have class SQL, use DBI::SQL() if the caller performs the quoting. 
Run Code Online (Sandbox Code Playgroud)

这里有什么问题?这个警告严重吗?怎么解决?

更新:

更新sqldf及其相关包后会发生这种情况.我使用的命令是sqldf("select * from something order by something")

r sqldf

6
推荐指数
0
解决办法
906
查看次数

标签 统计

sqldf ×10

r ×9

data.table ×3

sql ×3

csv ×1

database ×1

dataframe ×1

memory ×1

pandas ×1

python ×1

row ×1

sqlite ×1