分類: R

R 字串與因子

改變大小寫

如果要改變字串中英文字母的大小寫,可以運用 touppertolower 函數:

toupper("Foo Bar")
[1] "FOO BAR"
tolower("Foo Bar")
[1] "foo bar"

子字串

若要從字串中取出一部分的子字串,可以使用 substrsubstring 函數,這兩個函數的用法幾乎都相同,第一個參數是輸入的字串,第二與第三個參數則是子字串的開始與結束位置:

substr("abcdef", 2, 4)
[1] "bcd"
substring("abcdef", 2, 4)
[1] "bcd"

substrsubstring 只有在處理向量時會有一些小差異:

x.strings <- c(
  "abcdefghij",
  "ABCDEFGHIJ",
  "1234567890"
)
substr(x.strings, 1:4, 8)
[1] "abcdefgh" "BCDEFGH"  "345678"
substring(x.strings, 1:4, 8)
[1] "abcdefgh" "BCDEFGH"  "345678"   "defgh"

分割字串

若要將一個字串分割成多個字串,可以使用 strsplit 函數,第一個參數是輸入的字串,而第二個參數則是分隔字串:

strsplit("foo,bar,Foo,BAR", ",")
[[1]]
[1] "foo" "bar" "Foo" "BAR"

strsplit 函數預設會使用正規表示法(regular expression)來匹配分隔字串,如果要將指定的分隔字串視為一般的文字,可以加上 fixed = TRUE 參數。

strsplit("foo+bar+Foo+BAR", "+", fixed = TRUE)
[[1]]
[1] "foo" "bar" "Foo" "BAR"

strsplit 函數的輸出是一個列表(list),這樣設計的原因在於處理向量時,每一個結果的長度可能會不同:

x.str <- c("foo bar Foo BAR", "abc def")
strsplit(x.str, " ", fixed = TRUE)
[[1]]
[1] "foo" "bar" "Foo" "BAR"

[[2]]
[1] "abc" "def"

這是一個使用正規表示法的例子,使用逗號、句點或空白作為分隔字元:

strsplit("foo,bar.Foo BAR", "[,. ]")
[[1]]
[1] "foo" "bar" "Foo" "BAR"

檔案路徑

在 R 中我們可以藉由 getwd 函數取得目前的工作目錄,在存取檔案時若沒有特別指定路徑的話,就會以這個路徑為準。

getwd()
[1] "d:/workspace"

我們可以使用 setwd 函數來更改工作目錄:

setwd("c:/mypath")
getwd()
[1] "c:/mypath"

這裡我們使用正斜線(/)來區隔路徑,而如果要使用 Windows 慣用的反斜線也可以,只是在輸入反斜線時,要使用跳脫字元:

setwd("c:\\mypath")

另外我們也可以使用 file.path 函數來從各個目錄名稱來建立完整的路徑:

file.path("c:", "Program Files", "R")
[1] "c:/Program Files/R"

R.home 可以顯示 R 的安裝路徑:

R.home()
[1] "C:/PROGRA~1/R/R-32~1.4"

basename 可以從一串完整路徑中取出不包含路徑的檔案名稱:

basename("C:/Users/GTWang/Documents")
[1] "Documents"

Page: 1 2 3 4 5

G. T. Wang

個人使用 Linux 經驗長達十餘年,樂於分享各種自由軟體技術與實作文章。

Share
Published by
G. T. Wang

Recent Posts

[開箱] Marttiini MFT G10 芬蘭北歐直刀

本篇是 Marttiini M...

3 年 ago

[開箱] 一般打火棒、鎂塊打火棒

本篇是鎂塊打火棒與一般普通打火...

3 年 ago

[開箱] 瑞典 BAHCO 396-Lap 魚牌軍規摺疊鋸

本篇為瑞典 BAHCO 396...

3 年 ago

[DIY] 野炊水煮蛋、紅豆湯記錄

本篇記錄今年過年期間帶阿玄在家...

3 年 ago

[竹北素食] 善菓堂 SHAN GUO TANG

本篇是我最近去竹北善菓堂用餐時...

3 年 ago

Linux 複製檔案 cp 指令用法教學與範例

本篇介紹如何在 Linux 系...

3 年 ago