JS

很多方法可以用R查询数据。这篇文章展示了三种最常见的方法:

  运用 DBI

  使用dplyr语法

  使用R note book

  背景

  最近的一些软件包改进可以更轻松地将数据库与R一起使用。下面的查询示例演示了这些R软件包的一些功能。

  DBI。该DBI规范经历了许多最近的改进。使用数据库时,应始终使用符合要求DBI的包。

  dplyr和dbplyr。该dplyr软件包现在具有用于与数据库通信的通用SQL后端,新dbplyr软件包将R代码转换为特定于数据库的SQL。在撰写R代码时,以下数据库支持SQL转化:Oracle,Microsoft SQL Server,PostgreSQL,Amazon Redshift,Apache Hive和Apache Impala。随着时间的推移会有更多。

  odbc。odbc只要安装了ODBC驱动程序,R包就提供了连接到任何数据库的标准方法。所述odbcř包是DBI兼容的,并建议用于ODBC连接。

  RStudio最近对其产品进行了改进,因此它们可以更好地与数据库配合使用。

  RStudio IDE(v1.1)。使用最新版本的RStudio IDE,可以连接,浏览和查看各种数据库中的数据。IDE具有用于设置新连接的向导,以及用于浏览已建立连接的选项卡。这些新功能是可扩展的,可以与任何具有连接契约的 R包一起使用。

  RStudio 。如果使用的是RStudio专业产品,可以免费下载RStudio Professional Drivers。以下示例使用Oracle ODBC驱动程序。如果使用的是开源工具,则可以使用自己的驱动程序或使用社区程序包 - 存在许多用于连接各种数据库的开源驱动程序和社区程序包。

  将数据库与R一起使用是一个广泛的主题,还有更多工作要做。早期的博客文章讨论了我们的愿景。该愿景的一部分是创建一个网站,可以在一个地方找到有关数据库和R的所有内容。要了解更多信息,请访问我们的网站db.rstudio.com。

  示例:查询Oracle数据库中的库数据

  在此示例中,我们将查询Oracle数据库中的银行数据。我们使用DBI和odbc包连接到数据库。此特定连接需要数据库驱动程序和数据源名称(DSN),这两者都由系统管理员配置。您的连接可能使用其他方法。

  library(DBI)

  library(dplyr)

  library(dbplyr)

  library(odbc)

  con - dbConnect(odbc::odbc(), Oracle DB)

  1.使用查询 DBI

  您可以DBI使用该dbGetQuery()功能查询数据。只需将SQL代码粘贴到R函数中作为带引号的字符串。此方法有时称为传递SQL代码,可能是查询数据的最简单方法。应谨慎使用,以根据需要逃避您的报价。例如,'yes'写成'yes'。

  dbGetQuery(con,'

  select month_idx, year, month,

  sum(case when term_deposit = \'yes\' then 1.0 else 0.0 end) as subscribe,

  count(*) as total

  from bank

  group by month_idx, year, month

  ')

  2.使用dplyr语法进行查询

  您可以用dplyr语法编写代码,并将dplyr代码转换为SQL。在dplyr语法中编写查询有几个好处:您可以为R对象和数据库表保持相同的一致语言,不需要SQL或特定的SQL变体,您可以利用dplyr使用延迟评估的事实。dplyr语法很容易阅读,但您始终可以使用该show_query()函数检查SQL转换。

  q1 - tbl(con, bank) %%

  group_by(month_idx, year, month) %%

  summarise(

  subscribe = sum(ifelse(term_deposit == yes, 1, 0)),

  total = n())

  show_query(q1)

  SELECT month_idx, year, month, SUM(CASE WHEN (term_deposit = 'yes') THEN (1.0) ELSE (0.0) END) AS subscribe, COUNT(*) AS totalFROM (bank)

  GROUP BY month_idx, year, mo

  3.使用Rnote book 查询

  您是否知道可以在R Notebook代码块中运行SQL代码?要使用SQL,请在“ 文件”“新建文件”菜单下的RStudio IDE中打开R Notebook。使用,启动新的代码块,并使用代码块选项指定您的连接。如果要将查询输出发送到R数据帧,请在代码块选项中使用。指定时,您将能够在后续R代码块中使用输出。在这个例子中,我们使用输出。{sql}connection=conoutput.var = mydataframeoutput.varggplot2

  SELECT month_idx, year, month, SUM(CASE WHEN (term_deposit = 'yes') THEN (1.0) ELSE (0.0) END) AS subscribe,

  COUNT(*) AS totalFROM (bank)

  GROUP BY month_idx, year, month

  library(ggplot2)

  ggplot(mydataframe, aes(total, subscribe, color = year)) +

  geom_point() +

  xlab(Total contacts) +

  ylab(Term Deposit Subscriptions) +

  ggtitle(Contact volume)

  

  image.png

  摘要

  使用R查询数据没有单一的最佳方法。您可以选择多种方法,每种方法都有其优点。以下是使用本文中介绍的方法的一些优点。

  方法

  好处

  DBI :: dbGetQuery

  需要的依赖性更少

  dplyr语法

  对R和数据库对象使用相同的语法

  不需要SQL知识

  代码是SQL变体的标准

  懒惰的评价

  R Notebook SQL引擎

  复制并粘贴SQL - 无需格式化

  SQL语法突出显示

使用R的数据库查询的更多相关文章

  1. Atitit  DbServiceV4qb9 数据库查询类库v4 新特性

    Atitit  DbServiceV4qb9 数据库查询类库v4 新特性     V4新特性 安全特性,屏蔽了executeUpdate,使用v2版 Sql异常转换,特别转换了DuplicateEnt ...

  2. 【转】Delphi多线程学习(9):多线程数据库查询(ADO)

    原文:http://www.cnblogs.com/djcsch2001/articles/2382559.html ADO多线程数据库查询通常会出现3个问题: 1.CoInitialize 没有调用 ...

  3. 教程-Delphi多线程数据库查询(ADO)

    ADO多线程数据库查询通常会出现3个问题: 1.CoInitialize 没有调用(CoInitialize was not called):所以,在使用任何dbGo对象前,必须手 调用CoIniti ...

  4. Delphi多线程数据库查询(ADO)

    ADO多线程数据库查询通常会出现3个问题: 1.CoInitialize 没有调用(CoInitialize was not called):所以,在使用任何dbGo对象前,必须手 调用CoIniti ...

  5. 多线程数据库查询(ADO)

    ADO多线程数据库查询通常会出现3个问题: 1.CoInitialize 没有调用(CoInitialize was not called):所以,在使用任何dbGo对象前,必须手 调用CoIniti ...

  6. python操作oracle数据库-查询

    python操作oracle数据库-查询 参照文档 http://www.oracle.com/technetwork/cn/articles/dsl/mastering-oracle-python- ...

  7. [转载]Hibernate如何提升数据库查询的性能

    目录(?)[-] 数据库查询性能的提升也是涉及到开发中的各个阶段在开发中选用正确的查询方法无疑是最基础也最简单的 SQL语句的优化 使用正确的查询方法 使用正确的抓取策略 Hibernate的性能优化 ...

  8. MySQL 数据库查询数据,过滤重复数据保留一条数据---(MySQL中的row_number变相实现方法)

    转自: http://www.maomao365.com/?p=10564 摘要: 下文讲述MySQL数据库查询重复数据时,只保留一条数据的方法 实现思路: 在MySQL数据库中没有row_numbe ...

  9. 转 zabbix 优化方法 以及 后台数据库查询方法 两则

    ############sample 1 https://blog.51cto.com/sfzhang88/1558254 如何从Zabbix数据库中获取监控数据 sfzhang关注6人评论40627 ...

随机推荐

  1. testng入门教程15数据驱动

    testng在类 里面的数据驱动 package driver_test; import org.testng.annotations.DataProvider; import org.testng. ...

  2. selenium WebDriver处理文件下载

    下载文件WebDriver 允许我们设置默认的文件下载路径.也就是说文件会自动下载并且存在设置的那个目录中.下面以FireFox 为例执行文件的下载. package com.mypro.jase; ...

  3. Canvas标签基础

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. BCB ERROR:[Linker Error] 'XXX.LIB' contains invalid OMF record, type 0x21 (possibly COFF)

    今天C++builder 导入 gts .lib  (gts.dll)库文件 编译报错: [Linker Error] 'D:\...\V4.05.007.1000-20161028\GTS.LIB' ...

  5. 兼容安卓和ios实现一键复制内容到剪切板

    实现代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <m ...

  6. python插入排序算法总结

    插入排序算法总结: 插入算法的核心是 每次循环到一个数时,都认为这个数之前的数列都是排好序的,将一个数插入到已经排好序的有序数列中,从而得到一个新的.个数加一的有序数列. 过程:从第一个元素开始,第一 ...

  7. python webdriver api-上传文件的三种方法

    上传文件: 第一种方式,sendkeys(),最简单的 #encoding=utf-8 from selenium import webdriver import unittest import ti ...

  8. 禁止火狐浏览器缓存input标签方法

    禁止火狐浏览器缓存input标签方法 问题1:在火狐浏览器里,云平台的输入框.选项框.勾选框…填写之后按F5刷新页面,之前填的东西会保留着,其它浏览器不会火狐强制刷新用Ctrl + F5 浏览器自动保 ...

  9. spoj1825 Free tour II

    题目链接 一道神奇的点分治 貌似有很多做法,我觉得BIT要好些一些(雾 要求经过黑点数<k就用BIT区间查询前缀 对于每个点用  BIT[0,k-经过黑点数]的最大值+路径长度 使用点分治做到O ...

  10. (iOS)关于键盘遮挡textfield问题

    记录一下自己经常遇到问题.使用textfield(textview).当输入框位置比较靠下时,弹出的键盘会遮挡输入框,这是就需要动态移动输入框编辑状态时self.view的位置, 自己经常用的方法有两 ...