R语言——字符串

参考资料:学习R

        文本数据存储在字符向量中。重要的是,字符向量中的每个元素都是字符串,而非单独的字符。

        文本的基本单位是字符向量,着意味着大部分字符串处理函数也能用于字符向量。

1、创建和打印字符串

        字符向量可用c函数创建。我们可以用单引号或双引号把字符串引起来,只要引号之间匹配即可。建议使用双引号。

        paste函数能将不同字符串组合起来。在它传入的参数向量中,每个元素都能够自我循环以达到最长的矢量长度,然后字符串就被拼接在一起,中间以空格分开。可以使用参数sep更改分隔符,或使用相关的paste0函数去掉分隔符。所有的字符串组合后,可使用collapse参数把结果收缩成一个包含所有元素的字符串。

paste(c("red","yellow"),"lorry")
paste(c("red","yellow"),"lorry",sep="-")
paste(c("red","yellow"),"lorry",collapse=", ")
paste0(c("red","yellow"),"lorry")

        toString函数是paste的变种,它在打印向量时非常有用。它使用逗号和空格分隔每个元素,且可限制打印的数量。

x<-(1:15)^2
toString(x)
toString(x,width=40)

        cat是一个低级函数,很少直接调用它

        通常情况下,当字符串打印到控制台时,它们会议双引号括起来。如果对它们使用noquote函数,就可以去掉这些引号。有时,这会使文本更具可读性。

x<-c("I","saw","a","saw","that","could","out","saw","any","other","saw","I","ever","saw")
y<-noquote(x)
print(x)
print(y)

2、格式化数字

        有几个函数可用于数字的格式化。formatC可以让我们用C语言的格式化风格来指定使用固定型或科学型的格式、小数的位数以及输出的宽度。无论使用哪种选项,输入都应该是numeric类型,且输出是character字符向量或数组:

pow<-1:3
powers_of_e<-exp(pow)
formatC(powers_of_e)
# 指定3个数字
formatC(powers_of_e,digits=3)
# 前面加上空格
formatC(powers_of_e,digits=3,width=10)
# 科学格式
formatC(powers_of_e,digits=3,format="e")
# 前面加上+
formatC(powers_of_e,digits=3,flag="+")

        R还提供了更通用的C风格的格式化函数sprintf。与sprintf在其他语言中的工作方式一眼:第一个参数包含字符串或数字变量的占位符,其他参数则将逐个代入这些占位符。不过请注意,R中大部分的数值是浮点型的而非整数型的

        sprintf的第一个参数指定了一个格式化字符串,其中包括其他值得占位符。例如:%s代表另一个字符串,%f和%e分别代表固定型格式和科学型格式的浮点数,%d表示整数。其他参数的值将替换占位符。与paste函数类似,较短长度的输入将循环自身以匹配最长的输入。

sprintf("%s %d = %f","Euler's constant to the power",pow,powers_of_e)
sprintf("To three decimal places, e ^ %d = %.3f",pow,powers_of_e)
sprintf("In scientific notation, e ^ %d = %e",pow,powers_of_e)

        其他格式化数字的方法有format和prettyNum两个函数。format提供的格式化字符串的语法与formatC的用法基本类似。而prettyNum则非常适合于格式化那些非常大火非常小的数字:

format(powers_of_e)
# 保留2位小数
format(powers_of_e,digits=3)
# 去掉多余的0
format(powers_of_e,digits=3,trim=TRUE)
# 保留两位小数的科学计数
format(powers_of_e,digits=3,scientific = TRUE)
# 使用prettyNum函数
prettyNum(c(1e10,1e-20),big.mark = ",",small.mark = " ",preserve.width = "individual",scientific=FALSE
)

3、特殊字符

        有一些特殊字符可以被包含在字符串中。例如,我们可以通过\t插入一个制表符。在下例中,我们使用cat而非print,因为print执行的额外转换动作会把制表符\t转换成反斜杠和一个t。cat的参数fill=TRUE使光标在一行结束后移动到下一行:

cat("foo\tbar",fill=TRUE)

        将光标移动到下一行是通过打印换行符\N完成的(在R中,不要使用\r或\r\n来打印换行符,因为\r会将光标移动到当前行的开始并覆盖我们所写的内容);

cat("foo\nbar",fill=TRUE)

        打印反斜杠时需要连续输入两个反斜杠,以免被误认为是特殊字符:

cat("foo\\bar",fill=TRUE)

        如果我们需要在字符串中使用双引号,那么双引号前必须添加一个反斜杠来转义。同样,如果我们要在字符串中使用单引号,则单引号需要被转义:

cat("foo'bar",fill=TRUE)
cat("foo\'bar",fill=TRUE)
cat("foo\"bar",fill=TRUE)

        与之相反,如果在被双引号引用的字符串中使用单引号,或在单引号引用的字符串中使用双引号,则并不需要对其进行转义。

        通过打印警报符\a能让我们的电脑发出提示音,不过alarm函数也能完成此功能且可读性更好。当想要程序在一个耗时很长的分析任务结束后主动通知我们,可以使用这个函数。

4、更改大小写

        使用toupper和tolower函数能把字符串中的字符全部转换为大写或小写:

toupper("I'm Shouting")
tolower("I'm Whispering")

5、截取字符串

        有两个函数可以用于从字符串中截取子串:substring和substr。在大多数情况下,我们可以任意使用其中一个。不过,如果我们传入了不同长度的向量参数,它们的行为会略有不同。对substring来说,输出的长度与最长的输入一样;而对于substr函数来说,输出的长度只与第一个输入的相等:

woodchuck<-c("How much wood would a woodchuck chuck","If a woodchuck could chuck wood","He would chuck, he would, as much as he could","And chuck as much wood as a woodchuck would","If a woodchuck could chuck wood."
)
substring(woodchuck,1:6,10)
substr(woodchuck,1:6,10)

6、分割字符串

        paste及其相关函数能把字符串组合起来。strsplit则正好相反,它在指定的某些点上分割字符串。我们可以把上例中的字符串按照空格分开。在下面,fixed=TRUE意味着split的参数是固定长度的字符串而非正则表达式:

strsplit(woodchuck," ",fixed=TRUE)

        注意,strsplit返回的是列表(而非字符向量或矩阵)。这是因为它的结果可能由不同长度的字符向量组成。

        在我们的例子中,某些词最后的逗号有些烦人。最好的方法是在空格分割符前加一个可选的逗号,使用正则表达式就很容易搞定,?意味着“前面的字符可选”:

strsplit(woodchuck,",? ")

7、文件路径

        R有一个工作目录,默认为文件被读写的地方。我们可以使用getwd查看它的位置,并使用setwd来改变它:

getwd()
setwd("C:/users/...")

        这里需要注意,每个路径的目录部分由正斜杠分隔。我们也可以使用双反斜杠来表示Windows的路径,不过正斜杠仍为首选。

        我们可以使用file.path来从各个目录中创建文件路径。它会自动地在目录名称之间插入正斜杠:

file.path("C:","Program Files","R","R-devel")

        路径可以是绝对路径(从驱动器名称或网络共享处开始)或相对路径(相对于当前工作目录)。在后一种情况中,.用于当前目录,..用于父目录,~代表当前用户主目录。path.expand能将相对路径转换为绝对路径:

path.expand(".")
path.expand("..")
path.expand("~")

        basename只返回文件名,而不包括前面的目录位置。与之相反,dirname只返回文件的目录。

file_name <- "C:/Program Files/R/R-devel/bin/x64/RGui.exe"
basename(file_name)
dirname(file_name)

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

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

相关文章

如何区别在Spring Boot 2 和 Spring Boot 3 中使用 Knife4j:集成与配置指南

在现代的 Web 开发中&#xff0c;API 文档是不可或缺的一部分。Knife4j 是基于 Swagger 的增强工具&#xff0c;它不仅提供了更友好的 API 文档界面&#xff0c;还支持更多实用的功能&#xff0c;如离线文档导出、全局参数配置等。本文将详细介绍如何在 Spring Boot 2 和 Sprin…

pagehelper 分页插件使用说明

pom.xml&#xff1a;pageHelper坐标 <!--pageHelper坐标--><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.6</version></dependency> 分…

C++可变参数

可变参数C风格的可变参数C风格可变参数的使用 C11可变参数模板递归展开参数包参数列表展开折叠表达式 STL中的emplace插入接口 可变参数 C风格的可变参数 可变参数是一种语言特性&#xff0c;可以在函数声明中使用省略号...来表示函数接受可变数量的参数。 例如典型的printf…

数据库的操作,以及sql之DML

首先&#xff0c;创建表以及插入数据 create table t_text(id int primary key auto_increment,name varchar(20) unique not null,gender char(5) not null check(gender in ("男","女")),deed varchar(255) not null default "事例不详"); in…

vue2前端日志数据存储(indexedD)自动清理3天前的数据

前言&#xff1a;关于Dexie.js这个前端本地数据库&#xff0c;如何使用IndexedDB来存储数据&#xff0c;并且设置到期自动清理的机制。首先&#xff0c;我需要回忆一下Dexie.js的基本用法&#xff0c;以及IndexedDB的特性。IndexedDB是浏览器中的一种非关系型数据库&#xff0c…

【MySQL篇】索引特性,索引的工作原理以及索引的创建与管理

目录 一&#xff0c;初识索引 二&#xff0c;MySQL与磁盘交互的基本单位 三&#xff0c;MySQL中数据文件的特性 四&#xff0c;理解page和索引 五&#xff0c;聚簇索引和非聚簇索引 六&#xff0c;索引操作 查询索引 创建主键索引 唯一索引的创建 普通索引的创建 全文…

springboot项目启动常见的问题以及配置以及一些使用技巧

1.配置仓库 这里要把xml文件从国外的镜像源改成国内的镜像源。改镜像源可以查看这篇文章 点击查看 2.更改文件类型 方法一&#xff1a;右键文件找到Mark Dircetory as可以更改文件类型 方法二&#xff1a; 3.springboot本地Maven仓库的位置 4.pom.xml文件报红错误怎么办 这…

【初探数据结构】二叉树的顺序结构——堆的实现详解(上下调整算法的时间复杂度分析)

&#x1f4ac; 欢迎讨论&#xff1a;在阅读过程中有任何疑问&#xff0c;欢迎在评论区留言&#xff0c;我们一起交流学习&#xff01; &#x1f44d; 点赞、收藏与分享&#xff1a;如果你觉得这篇文章对你有帮助&#xff0c;记得点赞、收藏&#xff0c;并分享给更多对数据结构感…

流量分析2

一&#xff0c;webshell流量 [GKCTF 2021]签到 先看协议分级&#xff0c;大部分是tcp&#xff0c;里面有http的基于的行文本数据占了很大的比重&#xff0c;看看里面有什么 过滤http的流量 点击一条流量&#xff0c;里面的内容进去后面有基于行的文本数据&#xff0c; 先解he…

头歌实践教学平台--【数据库概论】--SQL

一、表结构与完整性约束的修改(ALTER) 1.修改表名 USE TestDb1; alter table your_table rename TO my_table; 2.添加与删除字段 #语句1&#xff1a;删除表orderDetail中的列orderDate alter table orderDetail drop orderDate; #语句2&#xff1a;添加列unitPrice alter t…

在 React 中,组件之间传递变量的常见方法

目录 1. **通过 Props 传递数据**2. **通过回调函数传递数据**3. **通过 Context API 传递数据**4. **通过 Redux 管理全局状态**5. **通过事件总线&#xff08;如 Node.js 的 EventEmitter&#xff09;**6. **通过 Local Storage / Session Storage**7. **通过 URL 查询参数传…

Redis + 布隆过滤器解决缓存穿透问题

Redis 布隆过滤器解决缓存穿透问题 1. Redis 布隆过滤器解决缓存穿透问题 &#x1f4cc; 什么是缓存穿透&#xff1f; 缓存穿透指的是查询的数据既不在缓存&#xff0c;也不在数据库&#xff0c;导致每次查询都直接访问数据库&#xff0c;增加数据库压力。 例如&#xff1…

Vue动态添加或删除DOM元素:购物车实例

Vue 指令系列文章: 《Vue插值:双大括号标签、v-text、v-html、v-bind 指令》 《Vue指令:v-cloak、v-once、v-pre 指令》 《Vue条件判断:v-if、v-else、v-else-if、v-show 指令》 《Vue循环遍历:v-for 指令》 《Vue事件处理:v-on 指令》 《Vue表单元素绑定:v-model 指令》…

vue h5实现车牌号输入框

哈喽&#xff0c;大家好&#xff0c;最近鹏仔开发的项目是学校校内车辆超速方面的统计检测方面的系统&#xff0c;在开发过程中发现有个小功能&#xff0c;就是用户移动端添加车牌号&#xff0c;刚开始想着就一个输入框&#xff0c;提交时正则效验一下格式就行&#xff0c;最后…

硬件基础(5):(3)二极管的应用

文章目录 [toc]1. **整流电路****功能**&#xff1a;**工作原理**&#xff1a;**应用实例**&#xff1a;电路组成&#xff1a;整流过程&#xff1a;电路的应用&#xff1a; 2. **稳压电路****功能**&#xff1a;**工作原理**&#xff1a;**应用实例**&#xff1a;电路组成及功能…

Wireshark网络抓包分析使用详解

序言 之前学计网还有前几天备考华为 ICT 网络赛道时都有了解认识 Wireshark&#xff0c;但一直没怎么专门去用过&#xff0c;也没去系统学习过&#xff0c;就想趁着备考的网络相关知识还没忘光&#xff0c;先来系统学下整理点笔记~ 什么是抓包&#xff1f;抓包就是将网络传输…

安心联车辆管理平台源码价值分析

安心联车辆管理平台源码的价值可从技术特性、功能覆盖、市场适配性、扩展潜力及商业化支持等多个维度进行分析。以下结合实际应用进行详细解读&#xff1a; 一、技术架构与开发优势 主流技术栈与高性能架构 源码采用成熟的前后端分离架构&#xff0c;后端基于Java技术&#xff…

【操作系统】Docker如何使用-续

文章目录 1、概述2、巩固知识2.1、基础命令2.2、容器管理2.3、镜像管理2.4、网络管理2.5、Compose 3、常用命令 1、概述 在使用Docker的过程中&#xff0c;掌握常用的命令是至关重要的。然而&#xff0c;随着时间的推移&#xff0c;我们可能会遗忘一些关键的命令或对其用法变得…

ElementUI el-menu导航开启vue-router模式

有没有小伙伴遇到这么一种情况&#xff1a;ElementUI el-menu导航中&#xff0c;开启vue-router 的模式后&#xff0c;点击触发事件而不进行路由跳转&#xff1f; 别慌&#xff01;下面直接说解决方案&#xff1a; 借助路由守卫进行判断 给el-menu绑定切换事件&#xff0c;给…

【leetcode hot 100 17】电话号码的字母组合

分析&#xff1a;当设计关键字“所有组合”时&#xff0c;要考虑深度优先遍历、广度优先遍历&#xff08;层次遍历&#xff09;&#xff0c;其中&#xff1a; 深度优先搜索&#xff1a; 自顶向下的递归实现深搜定义子问题在当前递归层结合子问题结果解决原问题 广度优先搜索 利…