R 的字元處理函數 paste

最近對文字資料探勘(text mining)特別感到興趣,因此,今天就來談談 R 的字元處理。大家都知道 R 中處理字元最常用的函數就屬 paste 了。其實 paste 有兩個重要參數 collapse 與sep,請先看下面的例子。

> paste("one", 2, "three", 4, "five")

[1] "one 2 three 4 five"

這是將個別的單一字串(string)粘貼起來。

> paste(c("one", "two", "three", "four"), collapse = " ")

[1] "one two three four"

此函數也可將一字元向量(character vector)中的各元素(i.e. 各字串)串接起來,銜接字元以collapse 參數設定之。

如果是多個字元向量的話,請看下面的例子:

> paste("X", 1:5, sep = "")

[1] "X1" "X2" "X3" "X4" "X5"

> paste(c("X", "Y"), 1:5, sep = "")

[1] "X1" "Y2" "X3" "Y4" "X5"

paste 函數可以將兩個(或多個)字元向量的對應元素粘貼起來,銜接字元以 sep 參數設定之。

請注意!所得結果仍為一字元向量。而且 R 中函數均有向量化(vectorization)的特性,會自動將較短的向量擴增其長度直至與較長向量的長度相等後,再做運算(此處即為 paste 運算)。

> paste(c("X", "Y"), 1:5, sep = "_", collapse = "|")

[1] "X_1|Y_2|X_3|Y_4|X_5"

> paste(c("X", "Y"), 1:5, "^", c("a", "b"), sep = "_", collapse = "|")

[1] "X_1_^_a|Y_2_^_b|X_3_^_a|Y_4_^_b|X_5_^_a"

更有趣的例子在此,sep 與 collapse 都使用的情況下,還是會遵循向量化特性,先串接對應元素,再依 collapse 設定串接字元向量中的各元素。因此,其最終結果為一字串,而非字串向量!

> paste(c("X", "Y"), 1:5, "^", c("a", "b"), sep = "_")

[1] "X_1_^_a" "Y_2_^_b" "X_3_^_a" "Y_4_^_b" "X_5_^_a"

最後,再複習一下!沒有 collapse,只有 sep 的情況下,其結果為一字元向量。

參考資料: Spector, P. (2008), Data Manipulation with R, Springer.

撰文者: 台北商業技術學院資訊與決策科學所教授、中華 R 軟體學會理事長 鄒慶士 博士