R语言——获取数据1

参考资料:学习R

        数据的来源可以由很多。R内置有许多数据集,而在其他的附件包中能找到更多的数据。R能从各式各样的来源中读取,且支持大量的文件格式。

1、内置的数据集

        R的基本分发包有一个datasets,里面全是示例数据集。很多其他包也含有数据集。使用data函数可以查看所有我们已成功加载了的包的数据集:

        如果需要更完整的列表,包括已安装的所有包的数据,可以使用

data(package=.packages(TRUE))

        如果我们想访问任意数据集里的数据,只需调用data函数,传入数据集的名称及其所在的包名(如果此包已经加载,可省略这个packages参数)

data("kidney",package="survival")

2、读取文本文件

        有众多的格式和文本文件标准可用于存储数据。用于存储数据的通用格式为分隔符(即CSV或制表符分隔文件)、可扩展标记语言(XML)、JavaScript对象表示法(JSON)和YAML。

        将数据存储在文本文件中的主要优点是:它们可被几乎所有的其他数据分析软件读取

(1)CSV和制表符分隔(Tab-Delimited)文件

        矩形(类似电子表格的) 数据通常存储在带有分隔符的文件中, 特别是逗号分隔值(CSV)和制表符分隔值文件。read.table函数将读取这些分隔符文件,并将结果存储在一个数据框中

        RedDeerEndocranialVolume.dlm 是一个以空格符分隔的文件, 它包含了一些使用不同技术
测量得到的马鹿的颅容积数据。数据文件可以在 learningr 包的extdata文件夹中找到。该数据有标题行,所以我们需要给read.table传递参数header=TRUE。因为并不是每次都会进行二次测量,所以不是所有行都是完整的。给read.table传递参数fill=TRUE会使用NA值来代替那些缺失的域。下例中的system.file函数用于定位包中的文件。

install.packages("learningr")
library(learningr)
deer_file<-system.file("extdata","RedDeerEndocranialVolume.dlm",package="learningr"
)
deer_data<-read.table(deer_file,header=TRUE,fill=TRUE)
str(deer_data,vec.len=1)

        注意, 每个列的类已自动确定, 行和列的名字也已自动分配。 列名( 默认情况下) 必须是有效的变量名(通过使用 make.names), 如果不提供行名那么行将就会按 1、 2、 3 编号,以此类推。

        有很多参数可以用来指定如何读取该文件,其中最重要的是sep参数,它决定了使用哪个字符作为字段之间的分隔符。nrow可以指定读取数据的行数,而skip决定跳过文件开始的多少行。更多高级选项包括:覆盖默认的行名、列名和类,指定输入文字的字符编码,以及输入的字符串格式的列如何声明。

        有几个read.table的包装函数使用起来比较方便。read.csv分隔符默认设置为逗号,并假设数据有标题行。read.csv2使用逗号作为小数位,并用分号作为分隔符。read.delim和read.delim2将分别使用句号和逗号作为小数位来导入制表符分隔的文件。

        在上图这种情况,我们不能仅调用read.csv就把所有东西都读出来,因为不同的数据块中所含有的字段数量不同,而且每个字段也确实不同。我们需要使用read.csv中的skip和nrow参数指定要读取文件中的哪些位置:

crab_file<-system.file("extdata","crabtag.csv",package="learningr"
)
crab_id_block<-read.csv(crab_file,header=FALSE,skip=3,nrow=2
)
print(crab_id_block)
crab_lifetiem_notebook<-read.csv(crab_file,header=FALSE,skip=8,nrow=5
)
print(crab_lifetiem_notebook)

       如果我们的数据是从另一种语言中导入的,那么可能需要把na.strings参数传递给read.table。对于SQL导出的数据,则使用na.string="NULL"。对于SAS或Stata导出的数据,则需要使用na.strings="."。从Excel中导出的数据,使用na.string=c("","#N/A","#DIV/0!","#NUM")。

        写入文件通常比读取文件要简单,因为我们无需担心读取文件时出现各种问题。很显然,write.table和write.csv分别对应着read.table和read.csv的读操作。这两个函数都需要一个数据框和写入文件的路径作为参数

write.csv(crab_id_block,"Data/Cleaned/id_block_data.csv",row.names=FALSE,fileEncoding = "utf8"
)

(2)非结构化文本文件

        不是所有的文本文件都像都像定界符文件那样有一个定义良好的而结构。如果文件的结构松散,更简单的做法是:先读入文件中的所有文本行,再对其内容进行分析或操作。readLines就提供了这种方法。它接受一个文件路径(或文件连接)和一个可选的最大行数作为参数来读取文件

text_file<-system.file("extdata","Shakespeare's The Tempest, from Project Gutenberg pg2235.txt",package="learningr"
)
the_tempest<-readLines(text_file)
the_tempest[19:20]
help(readLines)

        writeLines用于执行与readLines相反的操作。它写入文件时需要一个字符向量和文件作为输入参数:

writeLines(rev(text_file),  # rev执行向量的反操作"name.txt"
)

(3)XML和HTML文件

        当我们导入一个XML文件时,XML包(需安装并加载)将提供两种选择以存储结果:利用内部节点,或使用R节点。通常,我们应该使用内部节点来存储,因为这样我们能使用XPath来查询节点树。

        有几个函数可以用于导入XML数据,如xmlParse:

library(XML)
xml_file<-system.file("extdata","options.xml",package="learningr"
)
r_options<-xmlParse(xml_file)

        如上图所示,使用内部节点的问题是:str和head等汇总函数不能和它们一起使用。要使用R级的节点,需设置useInternalNodes=FALSE(或使用xmlTreeParse,它会默认设置此项属性)

xmlParse(xml_file,useInternalNodes = FALSE)
xmlTreeParse(xml_file)

        XPath是一种用于查询XML文档的语言,它能基于某些过滤规则寻找相应的节点。下例中,我们将在文档//中寻找命名为variable的节点,此节点[]的name属性@包含contains了warn字符串。

library(XML)
xml_file<-system.file("extdata","options.xml",package="learningr"
)
r_options<-xmlParse(xml_file)
xpathSApply(r_options,"//variable[contains(@name,'warn')]")

        这种查询在提取网页数据中非常有用。htmlParse和htmlTreeParse是用于HTML页面导入的函数。

(4)JSON和YAML文件

        XML 的主要问题是它太冗长了,且你需要显式地指定数据的类型(它在默认情况下不能区分字符串和数字),这就使得它更冗长了。如果文件大小很重要(例如,当你要在网络上传输大量数据集时),信息过于冗余就成了问题。于是,有人发明了YAML和它的子集JSON来解决这些问题。它们特别适合于通过网络传输大量数据集,尤其是数字数据和数组。JSON是Web应用程序彼此之间传递数据的事实标准。

        有两个包可用于处理JSON数据:RJSONIO和rjson。在读入不正确的JSON时,RJSONIO一般比rjson更宽容。在这两个包中读取和写入JSON数据的函数名基本相同,所以很容易在它们之间
换。在下例中,双冒号 :: 用于把相同名字的函数从不同的包中分别出来(如果只加载两个包中的一个, 就不需要双冒号)。

install.packages(c("RJSONIO","rjson"))
library(RJSONIO)
library(rjson)
jamaican_city_file<-system.file("extdata","Jamaican Cities.json",package="learningr"
)
jamaican_ctiy_RJSONIO<-rjson::fromJSON(jamaican_city_file)
print(jamaican_ctiy_RJSONIO)

        JSON的规范不允许无穷值或 NaN 值,而且它对缺失数的定义比较模糊。这两个包处理这些值的方式有所不同:RJSONIO 把 NaN 和 NA 映射为 JSON 的 null,但保留正负无穷;而 rjson 会把所有这些值都转换为字符串。

special_numbers<-c(NaN,NA,Inf,-Inf)
RJSONIO::toJSON(special_numbers)
rjson::toJSON(special_numbers)

        因为这两种方法都用于处理备受限制的JSON规范,所以如果你发现需要大量地处理这些特殊数字类型(或想在你的数据对象中加些评论),那么最好还是使用YAML。在yaml包中有两个函数能导入YAML数据:yaml.load接受一个YAML的字符串,并将其转换为一个R对象;yaml.load_file 也一样,不过它把输入的字符串作为包含 YAML 文件的路径处理。这里不再展示。

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

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

相关文章

HTTP 请求方法

HTTP 请求方法 引言 HTTP(超文本传输协议)是互联网上应用最为广泛的网络协议之一。它定义了客户端与服务器之间通信的规则。HTTP请求方法,也称为HTTP动词,是客户端向服务器发送请求时使用的操作类型。本文将详细介绍HTTP请求方法的概念、分类、常用方法及其在实际应用中的…

python函数装饰器

python函数装饰器 声明&#xff1a;博主并没有系统学习过python语言&#xff0c;在实际项目中遇到关于python不懂的语法&#xff0c;这里仅作为个人学习积累笔记 1.1 python函数相关基础 深入了解python函数装饰器移步&#xff1a;Python 函数装饰器 下面的笔记来源于上述链接…

OpenCV 图形API(7)用于将笛卡尔坐标(x, y)转换为极坐标(magnitude, angle)函数cartToPolar()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 计算二维向量的大小和角度。 cartToPolar 函数计算每个二维向量 (x(I), y(I)) 的大小、角度&#xff0c;或同时计算两者&#xff1a; magnitude…

什么是向量搜索Vector Search?

&#x1f9e0; 向所有学习者致敬&#xff01; “学习不是装满一桶水&#xff0c;而是点燃一把火。” —— 叶芝 我的博客主页&#xff1a; https://lizheng.blog.csdn.net &#x1f310; 欢迎点击加入AI人工智能社区&#xff01; &#x1f680; 让我们一起努力&#xff0c;共创…

搜索工具Everything下载安装使用教程(附安装包)

文章目录 前言一、搜索工具Everything介绍二、搜索工具Everything使用步骤1.软件下载2.版本选取3.启动软件4.文件搜索 前言 本教程将详细为您介绍 Everything 的下载、安装与使用方法&#xff0c;助您快速上手&#xff0c;充分利用这款工具的强大功能&#xff0c;告别文件查找…

element-plus中,Upload上传组件的使用 + 后端处理

目录 一. 案例一&#xff1a;用户更换个人头像 1.前端实现 2.后端实现 ①引入阿里云oss的依赖 ②编写AliOSSUtils工具类 ③编写controller层 ④编写service层 ⑤编写mapper层 3.效果展示 4.重点理解 结语 一. 案例一&#xff1a;用户更换个人头像 1.前端实现 <…

HarmonyOS-ArkUI Rcp模块类关系梳理

前言 本文重点解决的是&#xff0c;按照官网学习路径学习Tcp模块内容时&#xff0c;越看越混乱的问题。仿照官网案例&#xff0c;书写代码时&#xff0c;产生的各种疑惑。比如&#xff0c;类与类之间的关系&#xff0c;各种配置信息究竟有多少&#xff0c;为什么越写越混乱。那…

【云计算物理网络】数据中心网络架构设计

云计算的物理基础&#xff1a;数据中心网络架构设计 一、技术背景&#xff1a;从“三层架构”到“云原生网络”二、技术特点&#xff1a;云数据中心网络的四大支柱三、技术细节&#xff1a;CLOS架构的实现挑战四、未来方向&#xff1a;从“连接设备”到“感知服务”结语&#x…

window11 通过cmd命令行安装 oh my zsh 的教程

步骤 1&#xff1a;安装 WSL 2 和 Ubuntu 1. 以管理员身份打开 CMD wsl --install -d Ubuntu此命令会自动安装 WSL 2 和 Ubuntu 发行版。 安装完成后重启系统。 初始化 Ubuntu 在开始菜单中打开 Ubuntu&#xff0c;设置用户名和密码。 步骤 2&#xff1a;在 WSL 的 Ubunt…

gdb 调试命令记录

启动调试 gdb ./待调试的程序 #不带参数 (gdb) run #带参数 gdb --args ./your_program arg1 arg2 arg3 (gdb) run arg1 arg2 arg3 #图形化代码界面 (gdb) layout src基础调试命令 命令缩写作用run [args]r运行程序&#xff08;可带命令行参数&#xff09;break <locatio…

STM32F103低功耗模式深度解析:从理论到应用实践(上) | 零基础入门STM32第九十二步

主题内容教学目的/扩展视频低功耗模式什么是低功耗&#xff0c;模式介绍&#xff0c;切换方法。为电池设备开发做准备。 师从洋桃电子&#xff0c;杜洋老师 &#x1f4d1;文章目录 一、低功耗模式概述1.1 为什么需要低功耗模式&#xff1f;1.2 基本实现原理 二、低功耗模式的本…

JavaScript instanceof 运算符全解析

JavaScript instanceof 运算符全解析 核心语义: 判断一个对象(object)是否属于某个构造函数(constructor)或类的实例,基于原型链(prototype chain)实现类型检测。 一、JavaScript 中的基础用法 1. 语法结构 object instanceof constructor 返回值:布尔值(true/fal…

电脑基础之word基础操作

word是常用的办公软件之一&#xff0c;用于文档编辑&#xff0c;如合同/报告撰写、论文等‌。 一、简介 word文档最早由微软推出&#xff0c;通过Microsoft Office Word软件创建和编辑。由于涉及版权付费问题&#xff0c;大多数个人使用盗版软件。后来金山出了WPS office免费软…

深度解析Python代码中的广告信息提取与JSON处理

哈喽,大家好,我是木头左! 在当今数字化时代,广告无处不在,而从广告中提取关键信息并进行处理则成为了一项重要的技能。本文将深入剖析一段Python代码,该代码旨在从给定的JSON格式字符串中提取广告相关信息,并对其进行解析和处理。通过这段代码,将展示如何运用Python的j…

base64在线解码工具

我们经常会用到base64编码&#xff0c;相应的base64解码成为日常必备&#xff0c;所有我们需要拥有一个base64在线解码工具 base64在线解码工具

Linux——进程信号(3)(信号保存与信号捕捉)

进程信号3 信号保存信号相关概念详解信号集&#xff08;sigset_t&#xff09;及操作函数详解 信号捕捉信号捕捉的详细流程解析信号捕捉的核心概念信号捕捉的完整流程&#xff08;以 SIGQUIT 为例&#xff09; 信号保存 信号相关概念详解 1.核心概念 (1) 信号递达&#xff08…

批量在 txt 记事本文件的指定位置插入行,如在最末尾位置插入行

我们在网上下载的小说经常可以看到内容中每隔多少行都会现一些网站名称和联系方式等广告信息&#xff0c;这些都是固定或者随机插入在小说正文中的。那是怎么样实现在文本文件中指定位置插入这些行的呢&#xff1f;今天就给大家介绍一下如何在 txt 记事本文件或者其它类型的文本…

python的内存管理机制

目录 内存分配方式自动内存管理内存分配策略 垃圾回收机制引用计数垃圾回收对象创建和引用关系引用计数的状态删除变量 标记 - 清除垃圾回收 内存分配的区域划分栈内存堆内存 内存管理的优化内存池技术对象共享 Python 的内存管理机制是其运行效率和安全性的重要保障&#xff0…

火山引擎coze用户市场

火山引擎 **Coze**&#xff08;扣子&#xff09;的用户市场主要集中在 **需要快速构建和部署智能对话应用的企业及开发者群体**&#xff0c;覆盖多个行业与场景。以下是具体分析&#xff1a; --- ### **一、核心用户群体** 1. **企业用户** - **互联网/科技公司**&#…

Java 责任链模式 详解

责任链模式详解 一、责任链模式概述 责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式&#xff0c;它允许你将请求沿着处理链传递&#xff0c;直到有一个处理者能够处理它为止。这种模式解耦了请求的发送者和接收者&#xff0c;使多个对象都有机会处理请求。…