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.pswp.cn/web/73412.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/73412.shtml
英文地址,請注明出處:http://en.pswp.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; 自頂向下的遞歸實現深搜定義子問題在當前遞歸層結合子問題結果解決原問題 廣度優先搜索 利…