R 基礎知識:數(shù)據(jù)結構(list & factor)

R語言中基本的數(shù)據(jù)單位是向量(vector),通過對于向量的堆疊我們能組合出更進階的數(shù)據(jù)結構。這些數(shù)據(jù)結構包括彈性容器:list;有階階層的向量:factor;數(shù)據(jù)框:data.frame;二維的向量:matrix;陣列:array。

1. list

若我們用向量c()存儲數(shù)據(jù),因為其中有文字向量,所以在所有數(shù)據(jù)都會變成文字向量。

# 以朱元璋為例
name = "zhuyuanzhang"
nickname = c("zhuchongba","zhuguorui","zhubaba")
gender = "man"
profession = "emperor"
birthAndDead = "1328-1398"
age = 70
zyz = c(name,nickname,gender,profession,birthAndDead,age)
zyz

# [1] "zhuyuanzhang" "zhuchongba"   "zhuguorui"   
# [4] "zhubaba"      "man"          "emperor"     
# [7] "1328-1398"    "70"          

若我們用list來儲存,將宣告好的不同數(shù)據(jù)存儲進去。我們可以看到list的強大收納能力,他用數(shù)個[[索引值]]將各個向量依序放入其中。在list中各個向量依然保有自己的類型。

zyzList = list(name,nickname,gender,profession,birthAndDead,age)
zyzList
# [[1]]
# [1] "zhuyuanzhang"
# [[2]]
# [1] "zhuchongba" "zhuguorui"  "zhubaba"   
# [[3]]
# [1] "man"
# [[4]]
# [1] "emperor"
# [[5]]
# [1] "1328-1398"
# [[6]]
# [1] 70

# 查看各個數(shù)據(jù)的類型
str(zyzList) 
# List of 6
#  $ : chr "zhuyuanzhang"
#  $ : chr [1:3] "zhuchongba" "zhuguorui" "zhubaba"
#  $ : chr "man"
#  $ : chr "emperor"
#  $ : chr "1328-1398"
#  $ : num 70

list中選取數(shù)據(jù)的時候可以用[[索引值]]、[[“名稱”]]和$名稱。

# 上方的list只能有[[索引值]]來查找,因為我們沒有給各個變數(shù)命名
zyzList[[2]][2]
# [1] "zhuguorui

# 增加下變數(shù)名稱,就可以用[[“名稱”]]和$名稱來查找數(shù)據(jù)了
zyzListPro = list(Name = name,
                  Nickname = nickname,
                  Gender = gender,
                  Profession = profession,
                  BandD = birthAndDead,
                  Age = age)
zyzListPro[["Nickname"]]
zyzListPro[["Nickname"]][1]
zyzListPro$Nickname
zyzListPro$Nickname[1]
# [1] "zhuchongba" "zhuguorui"  "zhubaba"   
# [1] "zhuchongba"
# [1] "zhuchongba" "zhuguorui"  "zhubaba"   
# [1] "zhuchongba"

# 可以任意組合提取
sprintf("%s is a %s, maybe his age is %.2f",
        zyzListPro$Name,
        zyzListPro$Profession,
        zyzListPro$Age*2)
# [1] "zhuyuanzhang is a emperor, maybe his age is 140.00"
1.factor

R語言中很獨特的一個數(shù)據(jù)結構就是factor。他是一種有階層的向量(levels),一般叫他因子或是因素向量。

fourSeasons = c("spring", "summer", "autumn", "winter")
class(fourSeasons) # 文字向量
# [1] "character"

fourSeasonsFactor = factor(fourSeasons)
fourSeasonsFactor
class(fourSeasonsFactor) # 因子
# [1] spring summer autumn winter
# Levels: autumn spring summer winter
# [1] "factor"

預設的階層(lever)是以A-Z的字母排序的(Levels: autumn spring summer winter),不過設置factor中的參數(shù)ordered = TRUE 與 levels = ,就可以根據(jù)自己的偏好做排序。

fourSeasonsFactor = factor(fourSeasons,ordered = TRUE,levels = c("summer", "winter", "spring", "autumn"))
fourSeasonsFactor
# [1] spring summer autumn winter
# Levels: summer < winter < spring < autumn

Console印出的lever會按照大小關系做排序,所以factor很適合用在有隱含順序意義的文字向量。

temperatures = c("warm", "hot", "cold")
temperaturesFactor = factor(temperatures, ordered = TRUE, levels = c("cold", "warm", "hot"))
temperaturesFactor
# [1] warm hot  cold
# Levels: cold < warm < hot
file

本文由博客一文多發(fā)平臺 OpenWrite 發(fā)布!

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容