R語言字串處理的一次經歷

2021-08-20 12:10:54 字數 2166 閱讀 1903

最近筆者在研讀一些文獻,發現了remote sensing of environment上的一期special issues。這一期可以說是地學上data assimilation較為經典的研究吧。所以也是目前研讀的重點。當然也是有些其他需求,現在想對這一期專刊的作者與客座編輯做些分析**。涉及到一些r語言的字串處理方式。這裡記錄下。

資料就比較簡單了。一共兩個資料。第乙個資料如下。

主要包括title和author兩列,這個資料我命名為rseda*****.xlsx檔案。

第二個資料如下。

主要包括editorboard,這個資料我命名為editorboard.xlsx檔案。

第一步首先要把用r語言將資料讀入到記憶體裡。由於我存的都是excel檔案,就需要用到openxlsx包。之前我已經介紹過如何在r裡讀取excel檔案。詳情請見下文鏈結。

r語言讀取excel的神器——openxlsx

library(openxlsx)

basepath

rseda

editor

basepath是你存放資料的路徑,根據具體情況來處理。

接下來就是涉及到第一步處理,我們首先將author這種一長串的資料進行分割。

其實這種**的作者名是比較好分割的,直接使用」,」分割即可。使用的r語言函式是strsplit。輸入函式最主要包括兩個,乙個是字串,乙個是分割符號。樣例如下:

a 

aa a

兩次輸出分別為:

可以發現已經成功做了分割,使得變成了7個作者單獨的乙個向量,當然如果你的字串連線方式不是」,」,你只需要在split的等號後面進行修改。而作者個數不相同的情況下,這樣子如何儲存呢?這時候就用到了r裡的乙個特殊儲存結構:列表。列表很適合儲存這種長度不一的一些資料。

可以發現很好的儲存起來了,當然還有個小問題。由於英文的一些空格的原因,導致有些作者前後多了空格。所以做下一步匹配之前需要對這個進行處理,這裡用的是stringr包。

library(stringr)

b str_trim(b, "both")

效果如圖,side = 「both」,指去除掉兩邊的空格,」left」和」right」則是去除左邊或右邊的空格。接下來只需要篩選資料做匹配。這裡先生成乙個跟前面authorlist一樣結構的editorlist列表。然後針對每一篇文章作者分析,用乙個for迴圈和luse獲取作者個數,然後,再巢狀乙個for迴圈,獲取這一篇文章裡每個作者名字,接著去除空格,然後是匹配,ifelse語句的含義是表示,如果這個作者名字有出現在editor board裡,就輸出1,如果沒有輸出0。

輸出結果如圖。接著對每一篇文章統計,是否有editor board,有的話是1,沒有的話是0。

rseda$editor 

for (i in

1:nrow(rseda))

先生成了乙個欄位editor表示是否有editor board,預設值為1。而接著就是對每一行分析,這裡每一行,是否有含」1」,有的話,即為有editor board。

事實上分析結果顯示,這一期專刊裡居然乙個editor board也沒有參與文章發表。也是蠻奇怪的。後期可能會針對這些文獻做些介紹。這一期的r語言處理的步驟也可以用到其他部分,其實主要是字串分割,去除空格以及簡單的包含處理。

R語言處理字串

用於字串分割的函式 如strsplit 123abcdefgabcdef ab 1 1 123 cdefg cdef 字串連線 paste paste sep collapse null 字串分割 strsplit strsplit x,split,extended true,fixed false...

字串處理函式 R語言

用於字串分割的函式 如strsplit 123abcdefgabcdef ab 1 1 123 cdefg cdef 字串連線 paste paste sep collapse null 字串分割 strsplit strsplit x,split,extended true,fixed false...

R語言 字串處理函式

r語言中字串處理函式 來自base包 函式說 明 nchar x 計算x中的字元數量 substr 提取或替換乙個字元向量中的子串 grep 在字串中匹配某種模式 sub 在字串中搜尋模式,並以另乙個文字替換 strsplit 分割字串 toupper 大寫轉換 tolower 小寫轉換 1 nch...