从 R 中的关系数据库导入数据

发布日期:2026-06-25 05:24:03   来源 : 杭州电子商务研究院    浏览量 :5
杭州电子商务研究院 发布日期:2026-06-25 05:24:03  
5

介绍

R 非常适合统计。您需要数据(大量数据)才能获得更好的统计结果。关系数据库非常适合存储大量数据。

俗话说,用正确的工具做正确的事。

如果您的工作是分析大量数据,那么导入数据、获取数据、抓取数据、获取数据等都很有意义……无论您喜欢怎么称呼它,只需让您的 R 脚本使用该数据库中的好东西!

如何连接数据库?

要将数据导入 R 脚本,您必须连接到数据库。幸运的是,有专门的 R 包可用于连接到大多数流行的数据库。更棒的消息是:这些包的名称很简单。

  • RSQLite用于连接 SQLite 数据库
  • RPostgreSQL用于连接 PostgreSQL 数据库

我喜欢这种惯例:只需将 R 放在数据库软件名称前面,然后祈祷一切顺利,就可以了。

让我们从 R 解释器连接到 SQLite 数据库。我们需要哪个包?

      > install.packages('RSQLite')
> library(RSQLite)
> con <- dbConnect(SQLite(), 'play-example.db')
> con
<SQLiteConnection>
  Path: C:\Users\dan\Documents\play-example.db
  Extensions: TRUE
>
    

第一行安装 RSQLite 包(我跳过了无聊的安装消息)。第二行按预期加载 RSQLite 包。连接魔法发生在第三行,通过调用带有两个参数的dbConnect()函数:

  • 第一个参数是SQLite()函数,它在底层为 SQLite 创建一个驱动对象。
  • 第二个参数是数据库的名称。对于 SQLite,它是实际的文件名,如果文件尚未存在,则会创建它。

将连接存储到变量中是有意义的。新创建的连接显示 SQLite 数据库的文件路径。当然,如果您在机器上尝试,则可能会得到不同的路径。顺便问一下,您能检查一下机器上的 SQLite 文件的大小吗?解释是什么?

给我看看表格

我们可以预期新创建的 SQLite 数据库是空的。让我们使用一些 R 代码来检查并确认这一点。

      > dbListTables(con)
character(0)
>
    

好的,目前还没有表格,但至少dbListTables()函数有一个好听又直观的名字。让我们用经典的mtcars数据框创建一个新表。

      > dbWriteTable(con, 'cars', mtcars)
> dbListTables(con)
[1] "cars"
>
    

太棒了!现在我们可以玩汽车桌了。

使用 SQL 显示数据

让我们使用一些 SQL 从cars表中获取 3 行

      > dbGetQuery(con, 'SELECT * FROM cars LIMIT 3')
   mpg cyl disp  hp drat    wt  qsec vs am gear carb
1 21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
2 21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
3 22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
>
    

我们如何才能获得 mpg 高于 30 的汽车的 mpg 和气缸数,并按 mpg 升序排列?

      >> dbGetQuery(con, 'SELECT mpg, cyl 
                    FROM cars 
                    WHERE mpg>30 
                    ORDER BY mpg')
   mpg cyl
1 30.4   4
2 30.4   4
3 32.4   4
4 33.9   4
>
    

当然,您可以使用更复杂的查询来优化结果。

使用 dplyr 显示数据

如果您不想编写 SQL 查询,那么可以使用dplyr自动为您生成 SQL 代码。dplyr包非常适合处理数据框。 与dbplyr一起使用,它使您能够像处理典型数据框一样处理表格。

让我们安装先决条件并连接到数据库:

      > install.packages(c('dplyr', 'dbplyr'))
> library(dplyr)
> library(RSQLite)
> con <- dbConnect(SQLite(), 'play-example.db')
> cars <- tbl(con, 'cars')
>
    

看看第 4 行:我们再次使用dbConnect()。注意第一个参数:它是SQLite(),而不仅仅是SQLite。这很容易被忽略,我遇到过几次。在第 5 行,tbl()函数负责通过连接从cars表返回数据。

让我们看看dplyr如何帮助我们:

      > cars %>% select(mpg)
# Source:   lazy query [?? x 1]
# Database: sqlite 3.30.1 [C:\Users\dan\Documents\play-example.db]
     mpg
   <dbl>
 1  21  
 2  21  
 3  22.8
 4  21.4
 5  18.7
 6  18.1
 7  14.3
 8  24.4
 9  22.8
10  19.2
# … with more rows
>
    

这是什么?

嗯,%>%是关于从左到右传输数据,从cars返回mpg列的select()函数。为方便起见,可以这样理解cars然后选择mpg,等等。

我们再试一个吧。

再次,我们如何才能获得 mpg 高于 30 的汽车的 mpg 和气缸数,并按 mpg 升序排列?

      > cars %>% 
        select(mpg, cyl) %>% 
        filter(mpg>30) %>% 
        arrange(mpg)
# Source:     lazy query [?? x 2]
# Database:   sqlite 3.30.1 [C:\Users\dan\Documents\play-example.db]
# Ordered by: mpg
    mpg   cyl
  <dbl> <dbl>
1  30.4     4
2  30.4     4
3  32.4     4
4  33.9     4
>
    

看第一行:cars然后选择mpgcyl然后按 mpg 大于 30 进行筛选,然后按 mpg 排列。听起来很自然,对吧?而且,结果与使用 SQL 查询相同。

顺便说一句,我有没有提到dplyr会自动生成 SQL?让我们使用show_query()函数来查看生成的 SQL。

      > cars %>% 
        select(mpg, cyl) %>% 
        filter(mpg>30) %>% 
        arrange(mpg) %>% 
        show_query()
<SQL>
SELECT *
FROM (SELECT `mpg`, `cyl`
FROM `cars`)
WHERE (`mpg` > 30.0)
ORDER BY `mpg`
>
    

这和我们在上一节中精心编写的 SQL 查询非常相似。同时拥有手动 SQL 和dplyr这两个选项真是太好了!

结论

一旦连接到数据库,您可以使用 SQL 或dplyr导入数据,并在 R 代码中进一步使用该数据。

在本指南中,我们使用 SQLite 来说明从关系数据库导入数据的要点。这些要点也适用于使用其他关系数据库。

如果您想深入了解如何将数据从数据库导入 R 代码,请查看我的 Pluralsight 课程“使用R 从关系数据库导入数据”,其中涵盖了如何使用 ODBC 连接数据库以及如何保护凭据或解决连接问题等主题。

以上内容来自杭州电子商务研究院推送
关注
关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据