R語(yǔ)言 | 數(shù)據(jù)索引

索引即提取/查詢數(shù)據(jù)集中想要的數(shù)據(jù)钾军,與Python類似樱哼,R語(yǔ)言提供位置索引與名稱索引兩種索引體系砸讳。由于數(shù)據(jù)索引是基于數(shù)據(jù)容器挽荠,因此建議先閱讀R語(yǔ)言數(shù)據(jù)類型與數(shù)據(jù)容器,再閱讀本篇算墨。
本人的知乎|簡(jiǎn)書|CSDN|微信公眾號(hào)PurePlay 會(huì)同步更新量化金融與R干貨少孝。

目錄

1. 位置索引
??1.1 正整數(shù)
??1.2 負(fù)整數(shù)
??1.3 零
??1.4 空格
??1.5 邏輯值
2. 名稱索引

1. 位置索引

R語(yǔ)言的索引方式類似于線性代數(shù)中的i, j記號(hào),df[i, j]會(huì)返回df數(shù)據(jù)框中的第i行第j列元素熬苍。除了在括號(hào)中傳入正整數(shù)之外稍走,R語(yǔ)言還可以傳入負(fù)整數(shù)、零柴底、空格和邏輯值來(lái)進(jìn)行索引婿脸。

1.1 正整數(shù)

首先創(chuàng)建一個(gè)簡(jiǎn)單的數(shù)據(jù)框:

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數(shù)據(jù)框第2行第3列的元素:

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

注意到在Python等編程語(yǔ)言中,索引是從0開(kāi)始的柄驻,這意味著索引值0會(huì)返回第一個(gè)元素狐树,而1會(huì)返回第二個(gè)元素,以此類推鸿脓。而在R作為一門為數(shù)據(jù)科學(xué)抑钟、統(tǒng)計(jì)學(xué)者服務(wù)的語(yǔ)言,則與線性代數(shù)保持一致野哭,索引值1返回第一個(gè)元素在塔。

提取df數(shù)據(jù)框第2行的第2列與第3列兩個(gè)元素:

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

如果在索引中重復(fù)某個(gè)數(shù)值,R就會(huì)在相應(yīng)的索引位置重復(fù)提取相應(yīng)的數(shù)據(jù)拨黔。

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

其他數(shù)據(jù)容器的位置索引方式與之類似蛔溃,只要在中括號(hào)中傳入對(duì)應(yīng)維度的數(shù)值即可。

如果提取兩列及以上的數(shù)據(jù)篱蝇,返回值的格式為data.frame贺待。

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

如果只提取一列數(shù)據(jù),R則會(huì)返回一個(gè)原子型向量态兴;如果仍想返回一個(gè)數(shù)據(jù)框狠持,可以在括號(hào)內(nèi)添加drop = FALSE參數(shù)。

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

1.2 負(fù)整數(shù)

與正整數(shù)相反瞻润,負(fù)整數(shù)索引把負(fù)整數(shù)絕對(duì)值(正整數(shù))對(duì)應(yīng)的元素排除在外喘垂,返回剩下的所有元素。如果需要選取數(shù)據(jù)集中的大部分行或列绍撞,使用負(fù)整數(shù)索引會(huì)更加高效正勒。

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

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

如果在一個(gè)相同的索引位置同時(shí)使用正整數(shù)和負(fù)整數(shù),R便會(huì)報(bào)錯(cuò)傻铣。

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

1.3 零

零索引將不會(huì)提取任何信息章贞,實(shí)際操作中用處不大。

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 邏輯值

在邏輯值索引時(shí)蜕径,R會(huì)匹配索引值為TRUE的行或列的位置并提取相應(yīng)的元素。例如败京,提取第1行的第二兜喻、三個(gè)元素:

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

另外,在列表的索引中赡麦,如果采用單中括號(hào)的常規(guī)方式會(huì)返回一個(gè)新的列表對(duì)象(即使你只需要一個(gè)元素)朴皆。

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

為了直接提取出該元素,需要使用雙中括號(hào)泛粹。

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

2. 名稱索引

如果被索引的對(duì)象有名稱屬性遂铡,就可以采用待提取元素的名稱作為索引值。例如晶姊,提取整個(gè)price列:

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

使用$使名稱索引更加簡(jiǎn)便:

df$price
## [1] 89.2 23.2 21.2

且在列表當(dāng)中使用$可以直接返回對(duì)應(yīng)的元素扒接,而不是列表對(duì)象:

ls$numbers
## [1] 1 2

以上是本篇的全部?jī)?nèi)容,歡迎關(guān)注我的知乎|簡(jiǎn)書|CSDN|微信公眾號(hào)PurePlay , 會(huì)不定期分享量化金融與R干貨帽借。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末珠增,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子砍艾,更是在濱河造成了極大的恐慌,老刑警劉巖巍举,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件脆荷,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡懊悯,警方通過(guò)查閱死者的電腦和手機(jī)蜓谋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)炭分,“玉大人桃焕,你說(shuō)我怎么就攤上這事∨趺” “怎么了观堂?”我有些...
    開(kāi)封第一講書人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)呀忧。 經(jīng)常有香客問(wèn)我师痕,道長(zhǎng),這世上最難降的妖魔是什么而账? 我笑而不...
    開(kāi)封第一講書人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任胰坟,我火速辦了婚禮,結(jié)果婚禮上泞辐,老公的妹妹穿的比我還像新娘笔横。我一直安慰自己竞滓,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布吹缔。 她就那樣靜靜地躺著商佑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪涛菠。 梳的紋絲不亂的頭發(fā)上莉御,一...
    開(kāi)封第一講書人閱讀 51,590評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音俗冻,去河邊找鬼礁叔。 笑死,一個(gè)胖子當(dāng)著我的面吹牛迄薄,可吹牛的內(nèi)容都是我干的琅关。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼讥蔽,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼涣易!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起冶伞,我...
    開(kāi)封第一講書人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤新症,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后响禽,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體徒爹,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年芋类,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了隆嗅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡侯繁,死狀恐怖胖喳,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情贮竟,我是刑警寧澤丽焊,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站坝锰,受9級(jí)特大地震影響粹懒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜顷级,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一凫乖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦帽芽、人聲如沸删掀。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)披泪。三九已至,卻和暖如春搬瑰,著一層夾襖步出監(jiān)牢的瞬間款票,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工泽论, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留艾少,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓翼悴,卻偏偏與公主長(zhǎng)得像缚够,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鹦赎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容