Основы R: структуры данных (список и фактор)

машинное обучение

Основной единицей данных в языке R является вектор. Складывая векторы друг в друга, мы можем комбинировать более сложные структуры данных. Эти структуры данных включают эластичные контейнеры: список, иерархические векторы: фактор, кадры данных: data.frame, двумерные векторы: матрица, массивы: массив.

1. list

Если мы используем вектор c() для хранения данных, поскольку в нем есть текстовые векторы, все данные станут текстовыми векторами.

# 以朱元璋为例
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"          

Если мы используем список для хранения, сохраните в нем объявленные разные данные. Мы можем видеть мощную способность хранения списка, он использует несколько [[значений индекса]], чтобы последовательно помещать в него каждый вектор. Каждый вектор в списке по-прежнему имеет свой тип.

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

# 查看各个数据的类型
str(zyzList) 
# List of 6
#  $ : chr "zhuyuanzhang"
#  $ : chr [1:3] "zhuchongba" "zhuguorui" "zhubaba"
#  $ : chr "man"
#  $ : chr "emperor"
#  $ : chr "1328-1398"
#  $ : num 70

При выборе данных в списке вы можете использовать [[значение индекса]], [["имя"]] и $name.

# 上方的list只能有[[索引值]]来查找,因为我们没有给各个变数命名
zyzList[[2]][2]
# [1] "zhuguorui

# 增加下变数名称,就可以用[[“名称”]]和$名称来查找数据了
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 — фактор. Он представляет собой вектор с иерархиями (уровнями), обычно называемый фактором или вектором факторов.

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"

Уровень по умолчанию (рычаг) отсортирован по алфавиту от А до Я (Уровни: осень весна лето зима), но установив параметры в порядке = ИСТИНА и уровни = в факторе, вы можете сортировать по своим предпочтениям.

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

Уровни, напечатанные консолью, будут отсортированы в соответствии с отношением размера, поэтому фактор очень подходит для текстовых векторов с неявным значением порядка.

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

Эта статья опубликована в блогеOpenWriteвыпуск!