R語言常用的數(shù)據(jù)處理的包(1)

在R中有很多的內(nèi)置函數(shù)凰浮,比如transform()我抠、rbind()、cbind()等函數(shù)袜茧,這些函數(shù)我們可以直接使用菜拓,除此之外,還有常見的幾種包在處理數(shù)據(jù)的時(shí)候非常好用惫周。

dplyr包

dplyr包是Hadley Wickham(ggplot2包的作者尘惧,被稱為‘一個(gè)改變R的人’)的杰作, dplyr可用于處理R內(nèi)部或者外部的結(jié)構(gòu)化數(shù)據(jù)递递,相較于plyr包喷橙,dplyr專注接受dataframe對(duì)象, 大幅提高了速度,并且提供了更穩(wěn)健的數(shù)據(jù)庫接口。

一登舞、篩選: filter系列

filter贰逾、filter_all、filter_at菠秒、filter_if
用法:filter(.data, 條件...)
這里我們用R的內(nèi)置數(shù)據(jù)集作為例子(mtcars)

    filter(mtcars, cyl == 8)  
    filter(mtcars, cyl < 6)  
    #過濾出cyl < 6 并且 vs == 1的行  

    filter(mtcars, cyl < 6 & vs == 1)  
    filter(mtcars, cyl < 6, vs == 1)  
    #過濾出cyl < 6 或者 vs == 1的行  
    filter(mtcars, cyl < 6 | vs == 1)  
    #過濾出cyl 為4或6的行  
    filter(mtcars, cyl %in% c(4, 6))  

基于filter函數(shù)的用法疙剑,擴(kuò)展出了一些新的函數(shù)

1filter_all(mtcars, any_vars(. > 150)) #篩選任何變量>150的樣本
2filter_at(mtcars, vars(starts_with("d")), any_vars((. %% 2) == 0)) 
3#篩選變量以“d”結(jié)尾,并且變量 "%%2" 等于0
4filter_if(mtcars, ~ all(floor(.) == .), all_vars(. != 0))
5# 篩選變量向下取整 == 原變量數(shù)值, 并且這部分變量的數(shù)值践叠!= 0 的樣本集
二言缤、slice函數(shù)

用法:slice(.data, ...)
用處: slice() 函數(shù)通過行號(hào)選取數(shù)據(jù)

#選取第一行的數(shù)據(jù)
slice(mtcars, 1L)  
filter(mtcars, row_number() == 1L)  
#選取最后一行數(shù)據(jù)  
slice(mtcars, n())  
filter(mtcars, row_number() == n())  
#選取第5行到最后一行所有數(shù)據(jù)  
slice(mtcars, 5:n())  
filter(mtcars, between(row_number(), 5, n()))  

這個(gè)函數(shù)在實(shí)際中并不常用,但是在某些情況下就會(huì)非常好用禁灼。

三管挟、排列: arrange

用法:arrange(.data, ...)
arrange()按給定的列名依次對(duì)行進(jìn)行排序,默認(rèn)是按照升序排序弄捕,對(duì)列名加 desc() 可實(shí)現(xiàn)倒序排序僻孝。原數(shù)據(jù)集行名稱會(huì)被過濾掉

#以cyl和disp聯(lián)合升序排序 ,如果cyl相同守谓,按照disp 
  arrange(mtcars, cyl, disp)  
#以disp降序排序  
  arrange(mtcars, desc(disp))  
四穿铆、選擇: select

用法:select(.data, ...)

#選取變量名前綴包含Petal的列  
select(iris, starts_with("Petal"))  
#選取變量名前綴不包含Petal的列  
select(iris, -starts_with("Petal"))  
#選取變量名后綴包含Width的列  
select(iris, ends_with("Width"))  
#選取變量名后綴不包含Width的列  
select(iris, -ends_with("Width"))  
#選取變量名中包含etal的列  
select(iris, contains("etal"))  
#選取變量名中不包含etal的列  
select(iris, -contains("etal"))  
#正則表達(dá)式匹配,返回變量名中包含t的列  
select(iris, matches(".t."))  
#正則表達(dá)式匹配斋荞,返回變量名中不包含t的列  
select(iris, -matches(".t."))  
#直接選取列  
select(iris, Petal.Length, Petal.Width)  
#返回除Petal.Length和Petal.Width之外的所有列  
select(iris, -Petal.Length, -Petal.Width)  
#使用冒號(hào)連接列名荞雏,選擇多個(gè)列  
select(iris, Sepal.Length:Petal.Width)  
#選擇字符向量中的列,select中不能直接使用字符向量篩選,需要使用one_of函數(shù)  
vars <- c("Petal.Length", "Petal.Width")  
select(iris, one_of(vars))  
#返回指定字符向量之外的列  
select(iris, -one_of(vars))  
#返回所有列讯檐,一般調(diào)整數(shù)據(jù)集中變量順序時(shí)使用  
select(iris, everything())  
#調(diào)整列順序羡疗,把Species列放到最前面  
select(iris, Species, everything()) 

一般我們用select函數(shù)選擇一個(gè)數(shù)據(jù)的幾列

    df <- as.data.frame(matrix(runif(100), nrow = 10))  
    df <- tbl_df(df[c(3, 4, 7, 1, 9, 8, 5, 2, 6, 10)])  
    #選擇V4,V5别洪,V6三列  
    select(df, V4:V6)  
    select(df, num_range("V", 4:6))  
五、變形: mutate

用法:mutate(.data, ...)
mutate()函數(shù)對(duì)已有列進(jìn)行數(shù)據(jù)運(yùn)算并添加為新列柳刮,

    #添加新列wt_kg和wt_t,在同一語句中可以使用剛添加的列  
    mutate(mtcars, wt_kg = wt * 453.592, wt_t = wt_kg / 1000)  
    #計(jì)算新列wt_kg和wt_t挖垛,返回對(duì)象中只包含新列  
    transmute(mtcars, wt_kg = wt * 453.592, wt_t = wt_kg / 1000)  
六、分組: group

用法:group_by(.data, ..., add = FALSE)
group_by()用于對(duì)數(shù)據(jù)集按照給定變量分組秉颗,返回分組后的數(shù)據(jù)集痢毒。對(duì)返回后的數(shù)據(jù)集使用以上介紹的函數(shù)時(shí),會(huì)自動(dòng)的對(duì)分組數(shù)據(jù)操作蚕甥。

    #使用變量cyl對(duì)mtcars分組哪替,返回分組后數(shù)據(jù)集  
    by_cyl <- group_by(mtcars, cyl)  
    #返回每個(gè)分組中最大disp所在的行  
    filter(by_cyl, disp == max(disp))  
    #返回每個(gè)分組中變量名包含d的列,始終返回分組列cyl  
    select(by_cyl, contains("d"))  
    #使用mpg對(duì)每個(gè)分組排序  
    arrange(by_cyl,  mpg)  
    #對(duì)每個(gè)分組無重復(fù)的取2行記錄  
    sample_n(by_cyl, 2)  
七菇怀、數(shù)據(jù)關(guān)聯(lián):join

類似于merge的用法

 #內(nèi)連接凭舶,合并數(shù)據(jù)僅保留匹配的記錄

  inner_join(x,y, by = NULL, copy = FALSE, suffix = c(".x", ".y"), ...) 

  #左連接,向數(shù)據(jù)集x中加入匹配的數(shù)據(jù)集y記錄

  left_join(x,y, by = NULL, copy = FALSE, suffix = c(".x", ".y"), ...)

  #右連接爱沟,向數(shù)據(jù)集y中加入匹配的數(shù)據(jù)集x記錄

  right_join(x,y, by = NULL, copy = FALSE, suffix = c(".x", ".y"), ...) 

  #全連接帅霜,合并數(shù)據(jù)保留所有記錄,所有行

  full_join(x,y, by = NULL, copy = FALSE, suffix = c(".x", ".y"), ...)

  #返回能夠與y表匹配的x表所有記錄 

  semi_join(x,y, by = NULL, copy = FALSE, ...)

  #返回?zé)o法與y表匹配的x表的所有記錄
  anti_join(x, y, by = NULL, copy = FALSE, ...) 

當(dāng)然呼伸,dplyr不止這一種用法身冀,希望各位道友一起補(bǔ)充,豐富我們的數(shù)據(jù)數(shù)據(jù)經(jīng)驗(yàn)和生信分析的工作括享。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末搂根,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子铃辖,更是在濱河造成了極大的恐慌剩愧,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件澳叉,死亡現(xiàn)場(chǎng)離奇詭異隙咸,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)成洗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門五督,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人瓶殃,你說我怎么就攤上這事充包。” “怎么了?”我有些...
    開封第一講書人閱讀 165,830評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵基矮,是天一觀的道長(zhǎng)淆储。 經(jīng)常有香客問我,道長(zhǎng)家浇,這世上最難降的妖魔是什么本砰? 我笑而不...
    開封第一講書人閱讀 58,957評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮钢悲,結(jié)果婚禮上点额,老公的妹妹穿的比我還像新娘。我一直安慰自己莺琳,他們只是感情好还棱,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評(píng)論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著惭等,像睡著了一般珍手。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上辞做,一...
    開封第一講書人閱讀 51,754評(píng)論 1 307
  • 那天琳要,我揣著相機(jī)與錄音,去河邊找鬼凭豪。 笑死焙蹭,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的嫂伞。 我是一名探鬼主播若锁,決...
    沈念sama閱讀 40,464評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼棺牧,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起檀训,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤尝哆,失蹤者是張志新(化名)和其女友劉穎帕棉,沒想到半個(gè)月后空盼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡匙监,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評(píng)論 3 338
  • 正文 我和宋清朗相戀三年凡橱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片亭姥。...
    茶點(diǎn)故事閱讀 40,137評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡稼钩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出达罗,到底是詐尸還是另有隱情坝撑,我是刑警寧澤静秆,帶...
    沈念sama閱讀 35,819評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站巡李,受9級(jí)特大地震影響抚笔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜侨拦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評(píng)論 3 331
  • 文/蒙蒙 一殊橙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧狱从,春花似錦蛀柴、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吊洼。三九已至训貌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間冒窍,已是汗流浹背递沪。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留综液,地道東北人款慨。 一個(gè)月前我還...
    沈念sama閱讀 48,409評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像谬莹,于是被迫代替她去往敵國和親檩奠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評(píng)論 2 355

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