R 基础知识:数据结构(data.frame & matrix & array)

1.data.frame

data.frame是R语言用来处理表格式数据的数据结构。
我们可以运用data.frame()函数手动创造数据框,让我们建立一个很简单的数据框叫做great_nba_teams,这个数据框有队名、胜场数、败场数、是否获得总冠军与球季。

team_name <- c("Chicago Bulls", "Golden State Warriors")
wins = c(72, 73)
losses = c(10, 9)
is_champion = c(TRUE, FALSE)
season = c("1995-96", "2015-16")
great_nba_teams = data.frame(team_name, wins, losses, is_champion, season)

# 可以用View()来浏览表格
View(great_nba_teams)
# 用str()来查看数据框的向量类型
str(great_nba_teams)
# 'data.frame': 2 obs. of  5 variables:
#  $ team_name  : Factor w/ 2 levels "Chicago Bulls",..: 1 2
#  $ wins       : num  72 73
#  $ losses     : num  10 9
#  $ is_champion: logi  TRUE FALSE
#  $ season     : Factor w/ 2 levels "1995-96","2015-16": 1 2

我们使用观测值(observations)来称呼数据框中水平方向的数据,使用变数(variables)来称呼数据框中垂直方向的数据;数据框能够以[m,n]两个索引值来搭配选择。

great_nba_teams[1, 1] # 选出第一行第一列的数 "Chicago Bulls"
great_nba_teams[1, ] # 选出第一行的数
great_nba_teams[, 1] # 选出第一列的数

数据框预设会将文字向量改以factor向量储存,如果您希望修正为文字向量可以有两种作法。

# 一种是建立的时候在data.frame()函数中指定参数stringsAsFactors = FALSE。
great_nba_teams = data.frame(team_name, wins, losses, is_champion, season, stringsAsFactors = FALSE)
# 另一種是事後使用 as.character() 函數進行向量類型的轉換。
great_nba_teams = data.frame(team_name, wins, losses, is_champion, season)
great_nba_teams[, 1] = as.character(great_nba_teams[, 1])
great_nba_teams[, 5] = as.character(great_nba_teams[, 5])

数据框支持使用变数名称来选择,我们可以用$变数名称或者[,“变数名称”]这两种写法。

great_nba_teams$team_name
great_nba_teams[, "season"]
# [1] Chicago Bulls         Golden State Warriors
# Levels: Chicago Bulls Golden State Warriors
# [1] 1995-96 2015-16
# Levels: 1995-96 2015-16

我们也可以透过逻辑值向量来对数据框进行筛选,选出最终有获得总冠军的队伍。

won_champion = great_nba_teams$is_champion
great_nba_teams[won_champion, ]
2. matrix

矩阵与数据框相同是能够储存行(Row)与列(Column)的数据结构

# 建立一个新的matrix
my_mat = matrix(1:6, nrow = 2)
my_mat
class(my_mat)
#      [,1] [,2] [,3]
# [1,]    1    3    5
# [2,]    2    4    6
# [1] "matrix"

matrix()函数还有一个byrow的参数可以指定要用什么顺序摆放原先在向量中的元素,虽然这个矩阵的外观仍然是2x3,但六个数字摆放的方向变为水平的。byrow参数的预设值为FALSE,意思是如果我们没有特别指定,就是以垂直的方向来摆放矩阵。

my_mat = matrix(1:6, nrow = 2, byrow = TRUE)
my_mat
#      [,1] [,2] [,3]
# [1,]    1    2    3
# [2,]    4    5    6

可以用[]索引选取,也可以用逻辑值来筛选

my_mat = matrix(1:6, nrow = 2)
my_mat[2, 3]
# [1] 6

my_mat < 6 & my_mat > 1
my_mat[my_mat < 6 & my_mat > 1]
#       [,1] [,2]  [,3]
# [1,] FALSE TRUE  TRUE
# [2,]  TRUE TRUE FALSE
# [1] 2 3 4 5

矩阵由向量所建构而成,除了多一个维度之外,其余特性都很相似,例如我们将数值向量与逻辑值向量合并放入矩阵,则逻辑值向量亦会被自动转换成数值向量(True是1,False是0),进而就成为一个数值矩阵。

my_mat = matrix(c(1, 2, TRUE, FALSE, 3, 4), nrow = 2)
my_mat
#     [,1] [,2] [,3]
# [1,]    1    1    3
# [2,]    2    0    4
3.array

数组(array)是矩阵的多维度版本,除了原有的水平方向数据(Row)与垂直方向数据(Column)我们可以再多指定n个维度,简单来说,就是在一个数组的物件之中,可以允许储存多个矩阵。

my_arr = array(1:20, dim = c(2, 2, 5))
class(my_arr)
my_arr
# [1] "array"
# , , 1
# 
#      [,1] [,2]
# [1,]    1    3
# [2,]    2    4
# 
# , , 2
# 
#      [,1] [,2]
# [1,]    5    7
# [2,]    6    8
# 
# , , 3
# 
#      [,1] [,2]
# [1,]    9   11
# [2,]   10   12
# 
# , , 4
# 
#      [,1] [,2]
# [1,]   13   15
# [2,]   14   16
# 
# , , 5
# 
#      [,1] [,2]
# [1,]   17   19
# [2,]   18   20

因为现在有了三个维度,所以在使用索引值选择时,就需要增加第三个维度的索引值。

my_arr[1, 2, 2] # 选出第二个矩阵,第一行第二列的数
my_arr[1, , 2] # 选出第二个矩阵,第一行的数
file

本文由博客一文多发平台 OpenWrite 发布!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容