R语言 | 数据索引

索引即提取/查询数据集中想要的数据,与Python类似,R语言提供位置索引与名称索引两种索引体系。由于数据索引是基于数据容器,因此建议先阅读R语言数据类型与数据容器,再阅读本篇。
本人的知乎|简书|CSDN|微信公众号PurePlay 会同步更新量化金融与R干货。

目录

1. 位置索引
  1.1 正整数
  1.2 负整数
  1.3 零
  1.4 空格
  1.5 逻辑值
2. 名称索引

1. 位置索引

R语言的索引方式类似于线性代数中的i, j记号,df[i, j]会返回df数据框中的第i行第j列元素。除了在括号中传入正整数之外,R语言还可以传入负整数、零、空格和逻辑值来进行索引。

1.1 正整数

首先创建一个简单的数据框:

df <- data.frame(price = c(89.2, 23.2, 21.2),
                symbol = c('MOT','AAPL','IBM'),
                action = c('Buy','Sell','Buy'),
                stringsAsFactors = FALSE)
df
##   price symbol action
## 1  89.2    MOT    Buy
## 2  23.2   AAPL   Sell
## 3  21.2    IBM    Buy

提取df数据框第2行第3列的元素:

df[2,3]
## [1] "Sell"

注意到在Python等编程语言中,索引是从0开始的,这意味着索引值0会返回第一个元素,而1会返回第二个元素,以此类推。而在R作为一门为数据科学、统计学者服务的语言,则与线性代数保持一致,索引值1返回第一个元素。

提取df数据框第2行的第2列与第3列两个元素:

df[2,c(2,3)]
##   symbol action
## 2   AAPL   Sell

如果在索引中重复某个数值,R就会在相应的索引位置重复提取相应的数据。

df[c(2,2),c(2,3)]
##     symbol action
## 2     AAPL   Sell
## 2.1   AAPL   Sell

其他数据容器的位置索引方式与之类似,只要在中括号中传入对应维度的数值即可。

如果提取两列及以上的数据,返回值的格式为data.frame

class(df[2, 2:3])
## [1] "data.frame"

如果只提取一列数据,R则会返回一个原子型向量;如果仍想返回一个数据框,可以在括号内添加drop = FALSE参数。

class(df[2:3, 2])
## [1] "character"
class(df[2:3, 2, drop = FALSE])
## [1] "data.frame"

1.2 负整数

与正整数相反,负整数索引把负整数绝对值(正整数)对应的元素排除在外,返回剩下的所有元素。如果需要选取数据集中的大部分行或列,使用负整数索引会更加高效。

返回除了第一行之外的所有元素:

df[-1, 1:3]
##   price symbol action
## 2  23.2   AAPL   Sell
## 3  21.2    IBM    Buy

仅返回第一行的元素;

df[-(2:3), 1:3]
##   price symbol action
## 1  89.2    MOT    Buy

如果在一个相同的索引位置同时使用正整数和负整数,R便会报错。

df[c(-1,1), 1:3]
## Error in xj[i] : only 0's may be mixed with negative subscripts

1.3 零

零索引将不会提取任何信息,实际操作中用处不大。

df[0,0]
## data frame with 0 columns and 0 rows
df[0,1]
## numeric(0)

1.4 空格

空格表示提取该索引位置所代表维度的所有元素。例如,提取第一行的所有元素:

df[1, ]
##   price symbol action
## 1  89.2    MOT    Buy

1.5 逻辑值

在逻辑值索引时,R会匹配索引值为TRUE的行或列的位置并提取相应的元素。例如,提取第1行的第二、三个元素:

df[1,c(FALSE, TRUE, TRUE)]
##   symbol action
## 1    MOT    Buy

另外,在列表的索引中,如果采用单中括号的常规方式会返回一个新的列表对象(即使你只需要一个元素)。

ls <- list(numbers = c(1,2), 
           logical = TRUE, 
           string = c("a", "b", "c"))
ls[1]
## $numbers
## [1] 1 2
class(ls[1])
## [1] "list"

为了直接提取出该元素,需要使用双中括号。

ls[[1]]
## [1] 1 2

2. 名称索引

如果被索引的对象有名称属性,就可以采用待提取元素的名称作为索引值。例如,提取整个price列:

df[ ,"price"]
## [1] 89.2 23.2 21.2

使用$使名称索引更加简便:

df$price
## [1] 89.2 23.2 21.2

且在列表当中使用$可以直接返回对应的元素,而不是列表对象:

ls$numbers
## [1] 1 2

以上是本篇的全部内容,欢迎关注我的知乎|简书|CSDN|微信公众号PurePlay , 会不定期分享量化金融与R干货。

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

推荐阅读更多精彩内容