R中選擇數(shù)據(jù)框的行

本教程描述如何根據(jù)特定的條件來提取數(shù)據(jù)框的行土涝。

在本教程中碧信,您將從dplyr包中學(xué)習(xí)以下R函數(shù):

slice(): 按位置提取行

filter(): 提取滿足特定邏輯條件的行。例如? ?iris %>% filter(Sepal.Length > 6).

filter_all(),?filter_if() and?filter_at(): 篩選選擇的變量中的行蓖谢。這些函數(shù)將邏輯標(biāo)準(zhǔn)復(fù)制到所有變量或一組變量上珍语。filter rows within a selection of variables. These functions replicate the logical criteria over all variables or a selection of variables.

sample_n(): 隨機(jī)選擇n行??

sample_frac(): 隨機(jī)選擇一部分行?

top_n(): 選擇按變量排序的前n行??

我們還將向您展示如何刪除給定列中有缺失值的行。

需要的R包

加載tidyverse包捏膨,其中包括dplyr包:

library(tidyverse)

示例數(shù)據(jù)

我們將使用R內(nèi)置的iris數(shù)據(jù)集,首先將其轉(zhuǎn)換為tibble數(shù)據(jù)框(tbl_df)食侮,以便于進(jìn)行數(shù)據(jù)分析号涯。

my_data <- as_tibble(iris)

my_data

按位置提取行

函數(shù): slice()?[dplyr package]

my_data %>% slice(1:6)

根據(jù)邏輯標(biāo)準(zhǔn)過濾行

函數(shù):?filter()?[dplyr package]. 用于過濾符合某些邏輯條件的行。

在繼續(xù)之前锯七,我們將介紹邏輯比較和運(yùn)算符链快,它們對于過濾數(shù)據(jù)非常重要。

邏輯比較

R中可用的“邏輯”比較運(yùn)算符有:

<: for less than

>: for greater than

<=: for less than or equal to

>=: for greater than or equal to

==: for equal to each other

!=: not equal to each other

%in%: 包含group membership. 例如, “value?%in%?c(2, 3)” 意思是value可以取2或者3

is.na(): is NA

!is.na(): is not NA.

邏輯運(yùn)算符

value == 2|3: means that the value equal 2 or (|) 3.?

value?%in%?c(2, 3) is a shortcut equivalent to value == 2|3.

&: means and. For example sex == “female” & age > 25

初學(xué)者在R中最常犯的錯(cuò)誤是在測試相等性時(shí)使用=而不是==眉尸。請記住域蜗,在測試是否相等時(shí),應(yīng)該始終使用== (not =)噪猾。

根據(jù)邏輯標(biāo)準(zhǔn)提取行

One-column based criteria: Extract rows where Sepal.Length > 7:

my_data %>% filter(Sepal.Length >7)


基于多列的標(biāo)準(zhǔn)Multiple-column based criteria: Extract rows where Sepal.Length > 6.7 and Sepal.Width ≤ 3:? ? 提取萼片長度> 6.7和萼片寬度≤3的行

my_data %>% filter(Sepal.Length >6.7, Sepal.Width <=3)


Test for equality?(==): Extract rows where Sepal.Length > 6.5 and Species = “versicolor”:

my_data %>% filter(Sepal.Length >6.7, Species =="versicolor")


Using OR operator?(|): Extract rows where Sepal.Length > 6.5 and (Species = “versicolor” or Species = “virginica”):


my_data %>% filter(? Sepal.Length >6.7,? Species =="versicolor"| Species =="virginica")


Or, equivalently, use this shortcut (%in%?operator):

my_data %>% filter(? Sepal.Length >6.7,? Species %in% c("versicolor","virginica")? )

Filter rows within a selection of variables篩選選擇的變量中的行

函數(shù)?filter_all(),?filter_if() and?filter_at() 用于篩選選擇的變量中的行

這些函數(shù)將邏輯標(biāo)準(zhǔn)復(fù)制到所有變量或一組變量上霉祸。

從my_data中刪除分組列“Species”,創(chuàng)建一個(gè)新的演示數(shù)據(jù)集:

my_data2 <- my_data %>% select(-Species)

選擇所有變量都大于2.4的行:

my_data2 %>% filter_all(all_vars(.>2.4))

選擇任一變量大于2.4的行:

my_data2 %>% filter_all(any_vars(.>2.4))

更改要應(yīng)用篩選條件的列的選擇袱蜡。filter_at()允許使用vars()規(guī)范丝蹭。下面的R代碼對?Sepal.Length 和 Sepal.Width列進(jìn)行篩選

my_data2 %>% filter_at(vars(starts_with("Sepal")), any_vars(. >2.4))

刪除缺失值

我們從創(chuàng)建一個(gè)包含缺失值的數(shù)據(jù)框開始。在R中用?NA(Not Available)?用來表示缺失值:

# Create a data frame with missing data

friends_data <- data_frame(? name = c("A","B","C","D"),? age = c(27,25,29,26),? height = c(180,NA,NA,169),? married = c("yes","yes","no","no"))

# Print

friends_data

提取高度為NA的行:

friends_data %>% filter(is.na(height))

排除(刪除)高度為NA的行:

friends_data %>% filter(!is.na(height))

?!is.na()?意思是? “非” NAs.

從數(shù)據(jù)框中隨機(jī)選擇行

可以使用 sample_n() 函數(shù)選擇n個(gè)隨機(jī)行坪蚁,也可以使用? sample_frac()? ?函數(shù)選擇隨機(jī)分?jǐn)?shù)的行奔穿。我們首先使用函數(shù)? set.seed()? ?來啟動隨機(jī)數(shù)生成器引擎。這對于用戶重現(xiàn)分析非常重要敏晤。

set.seed(1234)

# Extract 5 random rows without replacement

my_data %>% sample_n(5, replace =FALSE)

# Extract 5% of rows, randomly without replacement

my_data %>% sample_frac(0.05, replace =FALSE)

選擇按變量排序的前n行

#Select the top 5 rows ordered by Sepal.Length

my_data %>% top_n(5, Sepal.Length)


# 按 Species 分組贱田,按Sepal.Length順序選擇每組前5位

my_data %>%? group_by(Species) %>%? top_n(5, Sepal.Length)

## # A tibble: 16 x 5

## # Groups:? Species [3]

##? Sepal.Length Sepal.Width Petal.Length Petal.Width Species?

##? ? ? ? ? <dbl>? ? ? <dbl>? ? ? ? <dbl>? ? ? <dbl> <fct>? ?

## 1? ? ? ? ? 5.8? ? ? ? 4? ? ? ? ? ? 1.2? ? ? ? 0.2 setosa? ?

## 2? ? ? ? ? 5.7? ? ? ? 4.4? ? ? ? ? 1.5? ? ? ? 0.4 setosa? ?

## 3? ? ? ? ? 5.7? ? ? ? 3.8? ? ? ? ? 1.7? ? ? ? 0.3 setosa? ?

## 4? ? ? ? ? 5.5? ? ? ? 4.2? ? ? ? ? 1.4? ? ? ? 0.2 setosa? ?

## 5? ? ? ? ? 5.5? ? ? ? 3.5? ? ? ? ? 1.3? ? ? ? 0.2 setosa? ?

## 6? ? ? ? ? 7? ? ? ? ? 3.2? ? ? ? ? 4.7? ? ? ? 1.4 versicolor

## # ... with 10 more rows

總結(jié)

本教程中,我們介紹了如何使用 dplyr 包過濾數(shù)據(jù)框的行:

使用邏輯標(biāo)準(zhǔn)過濾行:?my_data %>% filter(Sepal.Length >7)

隨機(jī)選擇N行:?my_data %>% sample_n(10)

隨機(jī)選擇一定比例的行:?my_data %>% sample_frac(0.1)

按某變量選擇前n行:?my_data %>% top_n(10, Sepal.Length)

按?Species?分組嘴脾,再選擇每組中Sepal.Length順序前5位:

my_data %>%? group_by(Species) %>%? top_n(5, Sepal.Length)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末男摧,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子译打,更是在濱河造成了極大的恐慌耗拓,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扶平,死亡現(xiàn)場離奇詭異帆离,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)结澄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門哥谷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人麻献,你說我怎么就攤上這事们妥。” “怎么了勉吻?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵监婶,是天一觀的道長。 經(jīng)常有香客問我,道長惑惶,這世上最難降的妖魔是什么煮盼? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮带污,結(jié)果婚禮上僵控,老公的妹妹穿的比我還像新娘。我一直安慰自己鱼冀,他們只是感情好报破,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著千绪,像睡著了一般充易。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上荸型,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天盹靴,我揣著相機(jī)與錄音,去河邊找鬼帆疟。 笑死鹉究,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的踪宠。 我是一名探鬼主播自赔,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼柳琢!你這毒婦竟也來了绍妨?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤柬脸,失蹤者是張志新(化名)和其女友劉穎他去,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體倒堕,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡灾测,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了垦巴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片媳搪。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖骤宣,靈堂內(nèi)的尸體忽然破棺而出秦爆,到底是詐尸還是另有隱情,我是刑警寧澤憔披,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布等限,位于F島的核電站爸吮,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏望门。R本人自食惡果不足惜形娇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望怒允。 院中可真熱鬧埂软,春花似錦、人聲如沸纫事。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽丽惶。三九已至,卻和暖如春爬立,著一層夾襖步出監(jiān)牢的瞬間钾唬,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工侠驯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留抡秆,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓吟策,卻偏偏與公主長得像儒士,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子檩坚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353

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