最近筆者在研讀一些文獻,發現了Remote Sensing of Environment上的一期Special Issues。這一期能夠說是地學上Data Assimilation較爲經典的研究吧。因此也是目前研讀的重點。固然也是有些其餘需求,如今想對這一期專刊的做者與客座編輯作些分析探討。涉及到一些R語言的字符串處理方式。這裏記錄下。git
數據就比較簡單了。一共兩個數據。第一個數據以下。github
主要包括Title和Author兩列,這個數據我命名爲RSEDAPaper.xlsx文件。ide
第二個數據以下。函數
主要包括EditorBoard,這個數據我命名爲EditorBoard.xlsx文件。3d
我其實想了解Remote Sensing of Environment這一期專刊裏,Editor Board參與的文章數量有幾篇?因此這就涉及到兩個處理,第一步是首先要對Author的字段進行分割成單獨的做者,第二步是與EditorBoard的數據作匹配。code
第一步首先要把用R語言將數據讀入到內存裏。因爲我存的都是Excel文件,就須要用到openxlsx包。以前我已經介紹過如何在R裏讀取Excel文件。詳情請見下文連接。blog
library(openxlsx) basepath <- "E:/RSEDA/" RSEDA <- read.xlsx(paste(basepath, "RSEDAPaper.xlsx", sep = "")) Editor <- read.xlsx(paste(basepath, "EditorBoard.xlsx", sep = ""))
basepath是你存放數據的路徑,根據具體狀況來處理。ci
接下來就是涉及到第一步處理,咱們首先將Author這種一長串的數據進行分割。字符串
其實這種論文的做者名是比較好分割的,直接使用","分割便可。使用的R語言函數是strsplit。輸入函數最主要包括兩個,一個是字符串,一個是分割符號。樣例以下:
a <- RSEDA$Author[2] a a <- unlist(strsplit(a, split = ",")) a
兩次輸出分別爲:
能夠發現已經成功作了分割,使得變成了7個做者單獨的一個向量,固然若是你的字符串鏈接方式不是",",你只須要在split的等號後面進行修改。而做者個數不相同的狀況下,這樣子如何存儲呢?這時候就用到了R裏的一個特殊存儲結構:列表。列表很適合存儲這種長度不一的一些數據。
authorlist <- list() for (i in 1:nrow(RSEDA)) { authors <- RSEDA$Author[i] authors <- unlist(strsplit(authors, split = ",")) authorlist[[i]] <- authors } authorlist
能夠發現很好的存儲起來了,固然還有個小問題。因爲英文的一些空格的緣由,致使有些做者先後多了空格。因此作下一步匹配以前須要對這個進行處理,這裏用的是stringr包。
library(stringr) b <- " John M. Morrison " str_trim(b, "both")
效果如圖,side = "both",指去除掉兩邊的空格,"left"和"right"則是去除左邊或右邊的空格。接下來只須要篩選數據作匹配。這裏先生成一個跟前面authorlist同樣結構的editorlist列表。而後針對每一篇文章做者分析,用一個for循環和luse獲取做者個數,而後,再嵌套一個for循環,獲取這一篇文章裏每一個做者名字,接着去除空格,而後是匹配,ifelse語句的含義是表示,若是這個做者名字有出如今Editor Board裏,就輸出1,若是沒有輸出0。
editorlist <- list() editorlist <- authorlist for (i in 1:nrow(RSEDA)) { luse <- length(authorlist[[i]]) for (m in 1:luse) { deauthor <- authorlist[[i]][m] deauthor <- str_trim(deauthor, 'both') editorlist[[i]][m] <- ifelse(deauthor%in%Editor$EditorBoard, 1, 0) } }
輸出結果如圖。接着對每一篇文章統計,是否有Editor Board,有的話是1,沒有的話是0。
RSEDA$editor <- 1 for (i in 1:nrow(RSEDA)) { RSEDA$editor[i] <- ifelse("1"%in%editorlist[[i]], 1, 0) }
先生成了一個字段editor表示是否有Editor Board,默認值爲1。而接着就是對每一行分析,這裏每一行,是否有含"1",有的話,即爲有Editor Board。
事實上分析結果顯示,這一期專刊裏竟然一個Editor Board也沒有參與文章發表。也是蠻奇怪的。後期可能會針對這些文獻作些介紹。這一期的R語言處理的步驟也能夠用到其餘部分,其實主要是字符串分割,去除空格以及簡單的包含處理。