R语言——获取数据1

news2025/4/5 8:40:45

参考资料:学习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.coloradmin.cn/o/2328476.html

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

相关文章

从零开始打造HTML5拼图游戏:一个Canvas实战项目

从零开始打造HTML5拼图游戏&#xff1a;一个Canvas实战项目 先看效果&#xff1a; 你是否曾经被那些精美的网页拼图游戏所吸引&#xff1f;用 HTML5 的 Canvas 技术&#xff0c;从零开始&#xff0c;教你怎么画图、处理鼠标事件&#xff0c;还有游戏的核心逻辑&#xff0c…

每日一题洛谷P8649 [蓝桥杯 2017 省 B] k 倍区间c++

P8649 [蓝桥杯 2017 省 B] k 倍区间 - 洛谷 (luogu.com.cn) #include <iostream> #include <vector> using namespace std; #define int long long signed main() {int n, k;cin >> n >> k;vector<int> a(n 1);vector<int> sum(n 1);vec…

Linux(十二)信号

今天我们就要来一起学习信号啦&#xff01;&#xff01;&#xff01;还记得小编在之前的文章中说过的ctrlc吗&#xff1f;之前小编没有详细介绍过&#xff0c;现在我们就要来学习啦&#xff01;&#xff01;&#xff01; 一、信号的基本介绍 首先&#xff0c;小编带领大家先一…

LeetCode算法题(Go语言实现)_30

题目 给定单链表的头节点 head &#xff0c;将所有索引为奇数的节点和索引为偶数的节点分别组合在一起&#xff0c;然后返回重新排序的列表。 第一个节点的索引被认为是 奇数 &#xff0c; 第二个节点的索引为 偶数 &#xff0c;以此类推。 请注意&#xff0c;偶数组和奇数组内…

【读书笔记·VLSI电路设计方法解密】问题61:扫描插入的目的是什么

如问题60所述,要构建可测试电路,必须确保电路中每个节点都具有可控性和可观测性。但对于包含时序元件(如触发器、锁存器等存储元件)的电路,若不采取特殊设计则难以实现这两项特性。这是因为时序元件关联节点的逻辑状态不仅取决于当前输入,还受其先前存储状态影响——它们…

VirtualBox安装FnOS

1.下载FnOS镜像 下载网址&#xff1a; https://www.fnnas.com/2.创建虚拟机 虚拟机配置如图所示&#xff08;注意操作系统类型和网卡配置&#xff09; &#xff08;注意启动顺序&#xff09; 3.启动虚拟机 网卡类型选择桥接的Virtual Adapter 如果没有IP地址或者IP地址无法…

Pycharm(十二)列表练习题

一、门和钥匙 小X在一片大陆上探险&#xff0c;有一天他发现了一个洞穴&#xff0c;洞穴里面有n道门&#xff0c; 打开每道门都需要对应的钥匙&#xff0c;编号为i的钥匙能用于打开第i道门&#xff0c; 而且只有在打开了第i(i>1)道门之后&#xff0c;才能打开第i1道门&#…

集合与容器:List、HashMap(II)

一、ArrayList 是集合框架中最核心的动态数组实现&#xff0c;高频使用的容器之一。 1. 核心数据结构 基于数组实现&#xff0c;维护elementData数组存储元素&#xff1a; transient修饰的elementData不会被默认序列化&#xff08;通过自定义序列化逻辑优化存储&#xff09;…

《AI大模型应知应会100篇》第3篇:大模型的能力边界:它能做什么,不能做什么

第3篇&#xff1a;大模型的能力边界&#xff1a;它能做什么&#xff0c;不能做什么 摘要 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;LLM&#xff09;已经成为许多领域的核心技术。然而&#xff0c;尽管它们展现出了惊人的能力&#xff0c;但也有明显的局限性…

小程序API —— 58 自定义组件 - 创建 - 注册 - 使用组件

目录 1. 基本介绍2. 全局组件3. 页面组件 1. 基本介绍 小程序目前已经支持组件化开发&#xff0c;可以将页面中的功能模块抽取成自定义组件&#xff0c;以便在不同的页面中重复使用&#xff1b;也可以将复杂的页面拆分成多个低耦合的模块&#xff0c;有助于代码维护&#xff1…

前端页面鼠标移动监控(鼠标运动、鼠标监控)鼠标节流处理、throttle、限制触发频率(setTimeout、clearInterval)

文章目录 使用lodashjs库手动实现节流&#xff08;通过判断之前设定的定时器setTimeout是否存在&#xff09; 使用lodashjs库 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Com…

在 Android Studio 中运行安卓应用到 MuMu 模拟器

一、准备工作 1、​​确保 MuMu 模拟器已正确安装并启动​​ 从官网下载安装最新版 MuMu 模拟器。启动后&#xff0c;建议在设置中调整性能参数&#xff08;如 CPU 核心数和内存分配&#xff09;&#xff0c;以保证流畅运行。 2、​​配置 Android Studio 环境​&#xff08;按…

【JavaEE】网络原理详解

1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 亲爱的朋友们&#x1f44b;&#x1f44b;&#xff0c;这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章&#xff0c;请别吝啬你的点赞❤️❤️和收藏&#x1f4d6;&#x1f4d6;。如果你对我的…

NOIP2013提高组.华容道

题目 509. 华容道 算法标签: 搜索, b f s bfs bfs, s p f a spfa spfa 思路 不难发现, 在人移动的过程中, 箱子是不动的, 从当前位置到下一个箱子旁边的位置不会移动箱子, 可以预处理出人在每个位置到其他位置的距离预处理, 从某一个状态出发, 走到另一个状态的最短路使…

政安晨【超级AI工作流】—— 基于COZE探索有趣的主题互动问答工作流(同宇宙儿童提问机)

政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff01; 本例&#xff0c;我们将从零展示如何创建一款专门针对儿童对某项主题进行问答的对话流智能体…

Derivatives and Differentiation (导数和微分)

Derivatives and Differentiation {导数和微分} 1. Derivatives and Differentiation (导数和微分)1.1. Visualization Utilities 2. Chain Rule (链式法则)3. DiscussionReferences For a long time, how to calculate the area of a circle remained a mystery. Then, in Anc…

P17_ResNeXt-50

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 一、模型结构 ResNeXt-50由多个残差块&#xff08;Residual Block&#xff09;组成&#xff0c;每个残差块包含三个卷积层。以下是模型的主要结构&#xff1…

Ubuntu上离线安装ELK(Elasticsearch、Logstash、Kibana)

在 Ubuntu 上离线安装 ELK(Elasticsearch、Logstash、Kibana)的完整步骤如下: 一.安装验证 二.安装步骤 1. 在联网机器上准备离线包 (1) 安装依赖工具 #联网机器 sudo apt update sudo apt install apt-rdepends wget(2) 下载 ELK 的 .deb 安装包 #创建目录将安装包下载…

PyCharm 下载与安装教程:从零开始搭建你的 Python 开发环境

PyCharm 是一款专为 Python 开发设计的集成开发环境&#xff08;IDE&#xff09;&#xff0c;它提供了强大的代码编辑、调试、版本控制等功能&#xff0c;是 Python 开发者的必备工具之一。如果你是初学者&#xff0c;或者正在寻找一款高效的开发工具&#xff0c;这篇文章将帮助…

TSMaster在新能源汽车研发测试中的硬核应用指南

——从仿真到标定&#xff0c;全面赋能智能汽车开发 引言&#xff1a;新能源汽车测试的挑战与TSMaster的破局之道 新能源汽车的快速发展对研发测试提出了更高要求&#xff1a;复杂的电控系统、高实时性通信需求、多域融合的验证场景&#xff0c;以及快速迭代的开发周期。传统测…