本文是擷取其他網路上R的向量相關的method及使用方式,包含:
- 因子方法
- 資料框架
- 集合
所有範例的測試程式:
#參考網址:https://blog.gtwang.org/r/r-strings-and-factors/4/
#產生字串元素陣列
members = c("Andy","Ace","Ting","Ting","Max","Jimmy")
#轉換成因子以後,預設會按照字母大小排列,並且只顯示不重複因子(level)
members.factor = factor(members)
#加入factor的第二個參數,進行指定陣列排序給Levels屬性
members.factorWithOrder = factor(members, levels = c("Ting", "Ace", "Jimmy", "Andy"))
#加入factor的第三個參數,給予類別名稱(Levesls屬性的值會被Labels給替代掉)
members.jobTitle = factor(members, levels = c("Ting", "Ace", "Jimmy", "Andy"), labels = c("PG","SA","PG","PM"))
#使用data.frame做轉因子處理
frame <- data.frame(
jobTitle_ = c("SA","PM", "PG", "PG" , "PG"),
membersName_ = levels(members.factor)
)
#陣列中加入新的元素(尾部)
members_add_bottom <- c(levels(members.factor), "Kirk")
#陣列中加入新的元素(頭部)
members_add_head <- c("Joy", members_add_bottom)
#使用list存取,參考網址:https://blog.csdn.net/sinat_26917383/article/details/51123214
members_list <- list(memberName="Ting" , jobTitle = "PG")
#使用Vector進行動態集合存取,參考網址:https://stackoverflow.com/questions/26508519/how-to-add-elements-to-a-list-in-r-loop
members_vector <- vector("list",3) #設定有三個元素(初始化),會轉變成list型態,用 is.atomic()會變成false
members_vector[1] <- "Ting"
members_vector[2] <- "Ace"
members_vector[3] <- "Jimmy"
members_vector[4] <- "Max" #可以超過原本定義的數量
#########################列印區#########################
members #列出所有陣列元素
length(members) #陣列數量
unique(members) #顯示所有的唯一元素(分大小寫不重複)
members.factor ##列出所有因子類別
levels(members.factor) #列出Levels屬性裡的元素
nlevels(members.factor) #因子總和數
relevel(members.factor , "Max") #重新指定levels屬性的排序結果,把Max排在第一
members.factorWithOrder #顯示排序結果
members.jobTitle #顯示給予類別名稱後的結果
frame #顯示data.frame的結果
c(members.factor) #轉成元素索引編號
members_add_bottom #陣列結尾加入元素
members_add_head #陣列開頭加入元素
members_list #顯示List物件結果
members_list$memberName #顯示List物件下的元素名稱值
members_list$jobTitle #顯示List物件下的元素名稱值
members_vector #輸出向量值
is.vector(members_vector) #是否為向量型態(布林值回傳)
as.vector(members_vector) #向量轉向量 結果等同於 members_vector
all.equal(members_vector , as.vector(members_vector)) #使用equals比較兩個向量(布林值回傳)
is.list(members_vector) #檢查是否為List型態
is.recursive(members_vector) #檢查是否為recursive物件型態(ex:list 或 function)
is.atomic(members_vector) #是否為原子向量 參考網址:https://stackoverflow.com/questions/8594814/what-are-the-differences-between-vector-and-list-data-types-in-r
執行結果如下圖:
> #########################列印區#########################
> members #列出所有陣列元素
[1] "Andy" "Ace" "Ting" "Ting" "Max" "Jimmy"
> length(members) #陣列數量
[1] 6
> unique(members) #顯示所有的唯一元素(分大小寫不重複)
[1] "Andy" "Ace" "Ting" "Max" "Jimmy"
> members.factor ##列出所有因子類別
[1] Andy Ace Ting Ting Max Jimmy
Levels: Ace Andy Jimmy Max Ting
> levels(members.factor) #列出Levels屬性裡的元素
[1] "Ace" "Andy" "Jimmy" "Max" "Ting"
> nlevels(members.factor) #因子總和數
[1] 5
> relevel(members.factor , "Max") #重新指定levels屬性的排序結果,把Max排在第一
[1] Andy Ace Ting Ting Max Jimmy
Levels: Max Ace Andy Jimmy Ting
> members.factorWithOrder #顯示排序結果
[1] Andy Ace Ting Ting <NA> Jimmy
Levels: Ting Ace Jimmy Andy
> members.jobTitle #顯示給予類別名稱後的結果
[1] PM SA PG PG <NA> PG
Levels: PG SA PM
> frame #顯示data.frame的結果
jobTitle_ membersName_
1 SA Ace
2 PM Andy
3 PG Jimmy
4 PG Max
5 PG Ting
>
> c(members.factor) #轉成元素索引編號
[1] 2 1 5 5 4 3
>
> members_add_bottom #陣列結尾加入元素
[1] "Ace" "Andy" "Jimmy" "Max" "Ting" "Kirk"
> members_add_head #陣列開頭加入元素
[1] "Joy" "Ace" "Andy" "Jimmy" "Max" "Ting" "Kirk"
> members_list #顯示List物件結果
$memberName
[1] "Ting"
$jobTitle
[1] "PG"
> members_list$memberName #顯示List物件下的元素名稱值
[1] "Ting"
> members_list$jobTitle #顯示List物件下的元素名稱值
[1] "PG"
>
> members_vector #輸出向量值
[[1]]
[1] "Ting"
[[2]]
[1] "Ace"
[[3]]
[1] "Jimmy"
[[4]]
[1] "Max"
> is.vector(members_vector) #是否為向量型態(布林值回傳)
[1] TRUE
> as.vector(members_vector) #向量轉向量 結果等同於 members_vector
[[1]]
[1] "Ting"
[[2]]
[1] "Ace"
[[3]]
[1] "Jimmy"
[[4]]
[1] "Max"
> all.equal(members_vector , as.vector(members_vector)) #使用equals比較兩個向量(布林值回傳)
[1] TRUE
> is.list(members_vector) #檢查是否為List型態
[1] TRUE
> is.recursive(members_vector) #檢查是否為recursive物件型態(ex:list 或 function)
[1] TRUE
> is.atomic(members_vector) #是否為原子向量
[1] FALSE