基于R语言的统计分析基础:使用SQL语句操作数据集

news2024/9/19 14:46:43

在使用R语言数据分析时,可以融合SQL语言使数据聚集操作更加便利,同时也可以增加对SQL语句的熟悉。借助sqldfDBIRSDLite等包,可以在R环境中直接运用SQL语句,轻松实现数据的分组统计、汇总分析,SQL的强大查询能力简化了数据处理步骤,让复杂分析变得简单。

举个例子,使用DBI包操作R语言自带数据集USArrests

library(DBI)  
# 初始化一个临时的内存数据库并将一个data.frame复制到其中  
con <- dbConnect(RSQLite::SQLite(), ":memory:")  
data(USArrests)  
dbWriteTable(con, "USArrests", USArrests)  
dbListTables(con)  
  
# 将所有查询结果提取到一个data frame中  
dbGetQuery(con, "SELECT * FROM USArrests")  
  
# 或者分批进行  
rs <- dbSendQuery(con, "SELECT * FROM USArrests")  
d1 <- dbFetch(rs, n = 10)  # 以10行为单位提取数据  
dbHasCompleted(rs)  
d2 <- dbFetch(rs, n = -1)  # 提取所有剩余数据  
dbHasCompleted(rs)  
dbClearResult(rs)  
  
# 清理  
dbDisconnect(con)

在这里插入图片描述

安装sqldf包和RSQLite

在进行操作前需要先安装sqldf包和RSQLite

install.packages("sqldf")  
install.packages("RSQLite") 

随后在脚本或命令行中导入这两个包:

library(sqldf)  
library(RSQLite) 

sqldf包函数参数说明

参数名称描述
xSQL 查询语句,可以是单个字符串或字符串向量。如果 x 缺失,则建立一个数据库连接,后续 sqldf 语句将使用这个连接。
stringsAsFactors是否将字符型列转换为因子类型。
row.names是否为数据框添加行名列。
envir指定查找数据框的环境。
method指定输出数据框的列类型转换方式。
file.format用于读取文件到数据库的参数设置。
dbname数据库名称,对于 SQLite 和 h2 默认是 :memory:,表示嵌入式数据库。
drv指定数据库驱动,如 "SQLite", "MySQL", "h2", "PostgreSQL"
user, password, host, port数据库连接的用户名、密码、主机和端口。
dllSQLite 可加载扩展的名称。
connection指定已存在的数据库连接。
verbose是否显示详细输出。

使用案例

1.创建数据库文件

这里我将R语言自带的iris数据集制作成.sqlite文件,在制作.sqlite文件时需要注意下,要将列命"Sepal.Length"更改为"Sepal_Length"格式,方便数据库操作。

library(RSQLite)   
# 创建SQLite数据库连接  
data("iris") 
names(iris) <- c("Sepal_Length", "Sepal_Width", "Petal_Length", "Petal_Width", "Species")
con <- dbConnect(RSQLite::SQLite(), dbname = "iris.sqlite")  
# 将iris数据集复制到数据库中的新表  
dbWriteTable(con, "iris_table", iris)  
# 关闭数据库连接(个人推荐每次在脚本结束时关闭连接)  
dbDisconnect(con)  

代码运行成功后会在工作目录中生成.sqlite文件和.sqlite-journal文件
在这里插入图片描述

2.查询表中数据

这里,使用刚才建立的iris.sqlite,数据库驱动为 SQLite,并使用 sqldf 函数执行了一个简单的 SQL 查询,即选择 iris 表中的所有列和行。查询结果存储在 iris_query_from_db 数据框中,随后被打印出来。

library(RSQLite)   
library(sqldf)
# 创建SQLite数据库连接  
con <- dbConnect(RSQLite::SQLite(), dbname = "iris.sqlite")  
# 将iris数据集复制到数据库中的新表  
dbWriteTable(con, "iris_table", iris)  
# 关闭数据库连接(个人推荐每次在脚本结束时关闭连接)  
dbDisconnect(con)  
iris_query_from_db <- sqldf("SELECT * FROM main.iris_table WHERE Species = 'setosa'", dbname = "iris.sqlite")
# 打印结果
print(iris_query_from_db)

在这里插入图片描述

3.查询列名

先通过PRAGMA table_info命令从数据库中检索iris_table表的列信息。检索到的信息存储在一个数据框column_names中,随后提取column_names数据框中的name列,并将其转换为字符向量column_names_list,最后打印出这个列名列表。

column_names <- sqldf("PRAGMA table_info(iris_table);", dbname = "iris.sqlite")  
column_names_list <- as.character(column_names$name)  
print(column_names_list)

在这里插入图片描述

4.查询前几条记录

这里仍使用刚才创建的数据库文件,只查询前6行

iris_first_few <- sqldf("SELECT * FROM main.iris_table LIMIT 5", dbname = "iris.sqlite") 
iris_first_few 

在这里插入图片描述

5.插入数据

先创建了一个包含新数据的数据框new_row,然后,使用dbExecute函数和参数化查询将新数据插入到iris_table表中,参数化查询可以帮助防止SQL注入攻击,并提高查询的安全性。

new_row <- data.frame(  
  Sepal.Length = 5.9,  
  Sepal.Width = 3.0,  
  Petal.Length = 5.1,  
  Petal.Width = 1.8,  
  Species = "virginica"  
)  
dbExecute(con, "INSERT INTO iris_table (Sepal_Length, Sepal_Width,
			 Petal_Length, Petal_Width, Species) VALUES (?, ?, ?, ?, ?)",  
          params = list(5.9, 3.0, 5.1, 1.8, "virginica"))  
6.数据筛选

这里筛选出Petal_Width 为0.2的所有数据

iris_petal_width_0_2 <- sqldf("SELECT * FROM main.iris_table WHERE Petal_Width = 0.2", dbname = "iris.sqlite")
iris_petal_width_0_2

在这里插入图片描述

7.数据聚合

通过sqldf()函数执行一个SQL查询,该查询从iris表中选取每个物种(Species),并计算其平均花萼长度(Sepal_Length)和花萼宽度(Sepal_Width)。查询结果存储在一个数据框ass中,

ass <- sqldf('SELECT Species, AVG("Sepal_Length") AS Sepal_Length, 
             AVG("Sepal_Width") AS Sepal_Width FROM iris GROUP BY Species')
ass

在这里插入图片描述

8. 多表连接

先创建两个数据框DF1DF2,它们分别包含IDValue列以及IDDetail列。然后通过sqldf函数执行一个SQL左连接查询,将DF1DF2ID列进行连接。查询结果包含DF1的所有列以及DF2中的Detail列,当ID匹配时,Detail列显示相应值,否则显示NA。查询结果存储在一个数据框result中,并打印出来以供查看。

# 建立两个数据框 DF1 和 DF2
DF1 <- data.frame(ID = 1:5, Value = 10:14)
DF2 <- data.frame(ID = 3:7, Detail = letters[1:5])
# 使用 SQL 进行连接查询
result <- sqldf("SELECT DF1.*, DF2.Detail FROM DF1 LEFT JOIN DF2 ON DF1.ID = DF2.ID")
result

在这里插入图片描述

最后切记有个好习惯,关闭数据库连接

dbDisconnect(con)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2141282.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MTC完成右臂抓取放置任务\\放置姿态设置

#include "mtc_tutorial/mtc_glass_bottle.hpp" static const rclcpp::Logger LOGGER rclcpp::get_logger("mtc_glass_right"); // 获取节点基础接口的实现 rclcpp::node_interfaces::NodeBaseInterface::SharedPtr MTCTaskNode_Right::getNodeBaseInterf…

(c++)字符串相加(真没想到字符串还有相加运算)

#include<iostream> #include<string> using namespace std;int main() {string ch1 "你好";string ch2 "再见";string ch3 ch1 ch2;cout << ch3 << endl;system("pause");return 0; } 运行结果&#xff1a; 学了c…

FreeRTOS学习——链表list

FreeRTOS学习——链表&#xff08;列表&#xff09;list&#xff0c;仅用于记录自己阅读与学习源码 FreeRTOS Kernel V10.5.1 参考大佬的好文章&#xff1a; freertos内核原理 Day1(链表) FreeRTOS-链表的源码解析 *list_t只能存储指向list_item_t的指针。每个list_item_t都…

【UE5 C++课程系列笔记】01——Visual Studio环境安装

1. 进入Visual Studio 官网&#xff0c;点击下载 下载社区版即可 下载后点击应用程序开始安装 2. 在“工作负荷”中&#xff0c;勾选如下选项 在“单个组件”中&#xff0c;勾选如下选项&#xff1a; 3. 等待下载安装 4. 安装好后&#xff0c;点击“继续但无需代码” 选择“工具…

《python语言程序设计》2018版第8章17题point类设计一个名为point的类

TypeError: point_class.dis_m() missing 1 required positional argument: ‘y2’ 这段代码为什么出错 一个又一个错误 终于摸到点头绪 #distance方法 我做的叫get_dis_m def get_dis_m(self):a_m self.__x1 - self.__x2b_m self.__y1 - self.__y2return (pow(a_m, 2) po…

k8s中的存储

目录 一 configmap 1.1 configmap的功能 1.2 configmap的使用场景 1.3 configmap创建方式 1.3.1 字面值创建 1.3.2 通过文件创建 1.3.3 通过目录创建 1.3.4 通过yaml文件创建 1.3.5 configmap的使用方式 1.3.5.1 使用configmap填充环境变量 1.3.5.2 通过数据卷使用c…

《程序猿之设计模式实战 · 观察者模式》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

AJAX 进阶 day4

目录 1.同步代码和异步代码 2.回调函数地狱和 Promise 链式调用 2.1 回调函数地狱 2.2 Promise - 链式调用 2.3 Promise 链式应用 3.async 和 await 使用 3.1 async函数和await 3.2 async函数和await_捕获错误 4.事件循环-EventLoop 4.1 事件循环 4.2 宏任务与微任务…

R语言统计分析——散点图1(常规图)

参考资料&#xff1a;R语言实战【第2版】 R语言中创建散点图的基础函数是plot(x,y)&#xff0c;其中&#xff0c;x和y是数值型向量&#xff0c;代表着图形中的&#xff08;x,y&#xff09;坐标点。 attach(mtcars) plot(wt,mpg,main"Basic Scatter plot of MPG vs. Weigh…

数据结构(Day14)

一、学习内容 结构体 概念 引入&#xff1a;定义整数赋值为10 int a10; 定义小数赋值为3.14 float b3.14; 定义5个整数并赋值 int arr[5] {1 , 2 , 3 , 4 ,5}; 定义一个学生并赋值学号姓名成绩 定义一个雪糕并赋值名称产地单价 问题&#xff1a;没有学生、雪糕 数据类型 解决&…

Text2vec -文本转向量

文章目录 一、关于 Text2vec1、Text2vec 是什么2、Features3、Demo4、News5、Evaluation英文匹配数据集的评测结果&#xff1a;中文匹配数据集的评测结果&#xff1a; 6、Release Models 二、Install三、使用1、文本向量表征1.2 Usage (HuggingFace Transformers)1.3 Usage (se…

★ C++进阶篇 ★ 多态

Ciallo&#xff5e;(∠・ω< )⌒☆ ~ 今天&#xff0c;我将继续和大家一起学习C进阶篇第一章----多态 ~ ❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️ 澄岚主页&#xff1a;椎名澄嵐-CSDN博客 C基础篇专栏&#xff1a;★ C基础篇 ★_椎名澄嵐的博客-CSDN博客 …

2024/9/16 英语每日一段

Stark argues that, in their gummies, at least,“The total sugar in a serving is less than in half a cherry.”Of course, cherries also provide fibre, vitamin C, and antioxidants--and 14 of them would count as one of your five-a-day. Artificial sweeteners to…

Ubuntu24.04部署docker

1、更新软件 apt update 2、安装curl apt install apt-transport-https curl 3、导入阿里云GPG秘钥 curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg 4、添加Docker阿里云仓库到Ubuntu 24.04的…

使用 release key 对 LineageOS 进行编译和签名

版权归作者所有&#xff0c;如有转发&#xff0c;请注明文章出处&#xff1a;https://cyrus-studio.github.io/blog/ 为什么需要使用 release key test-key 是一个公开的、众所周知的开发测试密钥&#xff0c;广泛用于测试阶段。这意味着任何人都可以获取这个密钥&#xff0c;…

详解HTTP/HTTPS协议

HTTP HTTP协议全名为超文本传输协议。HTTP协议是应用层协议&#xff0c;其传输层协议采用TCP协议。 请求—响应模型 HTTP协议采用请求-响应模型&#xff0c;通常由客户端发起请求由服务端完成响应。资源存储在服务端&#xff0c;客户端通过请求服务端获取资源。 认识URL 当…

jacoco生成单元测试覆盖率报告

前言 单元测试是日常编写代码中常用的&#xff0c;用于测试业务逻辑的一种方式&#xff0c;单元测试的覆盖率可以用来衡量我们的业务代码经过测试覆盖的比例。 目前市场上开源的单元测试覆盖率的java插件&#xff0c;主要有Emma&#xff0c;Cobertura&#xff0c;Jacoco。具体…

后台数据管理系统 - 项目架构设计-Vue3+axios+Element-plus(0916)

接口文档: https://apifox.com/apidoc/shared-26c67aee-0233-4d23-aab7-08448fdf95ff/api-93850835 接口根路径&#xff1a; http://big-event-vue-api-t.itheima.net 本项目的技术栈 本项目技术栈基于 ES6、vue3、pinia、vue-router 、vite 、axios 和 element-plus http:/…

企业社会信任数据,信任指数(2004-2022年)

企业社会信任是指公众对企业及其行为的信任程度&#xff0c;这种信任度是基于企业的商业行为、产品质量、服务态度、信息披露透明度和社会责任履行等多方面因素的综合评估。 2004年&#xff0d;2022年 企业社会信任数据&#xff08;大数据&#xff09;https://download.csdn.n…

【网络】高级IO——select版本TCP服务器

目录 前言 一&#xff0c;select函数 1.1.参数一&#xff1a;nfds 1.2.参数二&#xff1a; readfds, writefds, exceptfds 1.2.1.fd_set类型和相关操作宏 1.2.2.readfds, writefds, exceptfds 1.2.3.怎么理解 readfds, writefds, exceptfds是输入输出型参数 1.3.参数三…