R語言中的管道%>%

本文首發(fā)于我的個人博客

%>%來自dplyr包的管道函數(shù)轨香,我們可以將其理解為車間里的流水線,經(jīng)過前一步加工的產(chǎn)品才能進入后一步進一步加工蔗牡,其作用是將前一步的結(jié)果直接傳參給下一步的函數(shù)颖系,從而省略了中間的賦值步驟,可以大量減少內(nèi)存中的對象辩越,節(jié)省內(nèi)存嘁扼。

符號%>%,這是管道操作黔攒,其意思是將%>%左邊的對象傳遞給右邊的函數(shù)趁啸,作為第一個選項的設(shè)置(或剩下唯一一個選項的設(shè)置。

簡單例子

比如我們要算f(x)=sin((x+1)^2)在x=4的值督惰,可以分為以下三步:

計算a = x+1的值不傅;

計算b = a^2的值;

計算c = sin(b)的值

這樣一來赏胚,c就是我們需要的最終結(jié)果了访娶。用R語言管道傳參,只需要這樣寫:

f1 <- function(x){return(x+1)}

f2 <- function(x){return(x^2)}

f3 <- function(x){return(sin(x))}

管道(%>%)調(diào)用函數(shù)

library(dplyr) #用管道傳參需要這個包

a <- 1

b <- a %>% f1 %>% f2 %>% f3

print(b)

[1] -0.7568025

管道傳參具體用法

a%>%f(b)等同于f(a,b)栅哀;

b%>%f(a,.,c)等同于f(a,b,c);

例如:

>library(dplyr)

> f1 <- function(x,y){return(x+y)}

> f2 <- function(x,y,z){return(x*y+z)}

> a1 <- 2

> a2 <- 3

> a3 <- 4

> d1 <- a1 %>% f1(a2)

> d1

[1] 5

> d2 <- a2 %>% f2(a1,.,a3)

> d2

[1] 10

> d3 <- a3 %>% f2(a1,a2,.)

> d3

[1] 10

創(chuàng)建一份數(shù)據(jù):

> library(tidyr)

>date <- as.Date('2017-6-22')+0:14

> hour <- sample(1:24, 15)

> min <- sample(1:60, 15)

> second <- sample(1:60, 15)

> dat <- data.frame(date,hour,min,second)

> dat

date hour min second

1 2017-06-22 22 54 15

2 2017-06-23 7 51 4

3 2017-06-24 11 23 38

4 2017-06-25 23 45 50

5 2017-06-26 14 60 44

6 2017-06-27 5 24 56

7 2017-06-28 9 39 25

8 2017-06-29 20 22 22

9 2017-06-30 2 17 43

10 2017-07-01 17 56 31

11 2017-07-02 19 11 33

12 2017-07-03 24 35 18

13 2017-07-04 15 6 13

14 2017-07-05 4 12 47

15 2017-07-06 12 7 30

我們想把它變成標(biāo)準(zhǔn)時間格式震肮,怎么辦呢?“tidyr”包的函數(shù)unite()可以以指定字符連接指定列留拾,形成新列戳晌,具體用法見下例:

> a1 <- rep(1,5)

> a2 <- rep(2,5)

> a3 <- rep(3,5)

> A <- data.frame(a1,a2,a3)

> A

a1 a2 a3

1 1 2 3

2 1 2 3

3 1 2 3

4 1 2 3

5 1 2 3

> A1 <- unite(A,a12,a1,a2,sep = '~')

或者> A1 <- A %>% unite(a12,a1,a2,sep = '~')

對數(shù)據(jù)A的列a1,a2合并為新列a12,用“~”連接痴柔。

> A1

a12 a3

1 1~2 3

2 1~2 3

3 1~2 3

4 1~2 3

5 1~2 3

再來一步:

> A2 <- unite(A1,a123,a12,a3,sep = '/')

> A2 <- A1 %>% unite(a123,a12,a3,sep = '/')

對A1里面的a12與a3用“/”連接沦偎,形成新列“a123”。

> A2

a123

1 1~2/3

2 1~2/3

3 1~2/3

4 1~2/3

5 1~2/3

也可以用管道傳參一步搞定:

> A %>%unite(a12,a1,a2,sep = '~') %>% unite(a123,a12,a3,sep = '/')

a123

1 1~2/3

2 1~2/3

3 1~2/3

4 1~2/3

5 1~2/3

回到我們的問題

看懂上例咳蔚,就可以用管道傳參一步搞定時間轉(zhuǎn)換問題豪嚎。

> dat1 <- dat %>%unite(datehour,date,hour,sep = ' ')%>%unite(datetime,datehour,min,second,sep = ':')

> dat1

datetime

1 2017-06-22 22:54:15

2 2017-06-23 7:51:4

3 2017-06-24 11:23:38

4 2017-06-25 23:45:50

5 2017-06-26 14:60:44

6 2017-06-27 5:24:56

7 2017-06-28 9:39:25

8 2017-06-29 20:22:22

9 2017-06-30 2:17:43

10 2017-07-01 17:56:31

11 2017-07-02 19:11:33

12 2017-07-03 24:35:18

13 2017-07-04 15:6:13

14 2017-07-05 4:12:47

15 2017-07-06 12:7:30

覺得不錯,記得點贊哦谈火,也可以分享侈询、讓更多的人看到!

原文鏈接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末糯耍,一起剝皮案震驚了整個濱河市扔字,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌温技,老刑警劉巖革为,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異舵鳞,居然都是意外死亡震檩,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門蜓堕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抛虏,“玉大人博其,你說我怎么就攤上這事〖卫伲” “怎么了贺奠?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長错忱。 經(jīng)常有香客問我,道長挂据,這世上最難降的妖魔是什么以清? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮崎逃,結(jié)果婚禮上掷倔,老公的妹妹穿的比我還像新娘。我一直安慰自己个绍,他們只是感情好勒葱,可當(dāng)我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著巴柿,像睡著了一般凛虽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上广恢,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天凯旋,我揣著相機與錄音,去河邊找鬼钉迷。 笑死至非,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的糠聪。 我是一名探鬼主播荒椭,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼舰蟆!你這毒婦竟也來了趣惠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤夭苗,失蹤者是張志新(化名)和其女友劉穎信卡,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體题造,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡傍菇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了界赔。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片丢习。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡牵触,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出咐低,到底是詐尸還是另有隱情揽思,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布见擦,位于F島的核電站钉汗,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏鲤屡。R本人自食惡果不足惜损痰,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望酒来。 院中可真熱鬧卢未,春花似錦、人聲如沸堰汉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽翘鸭。三九已至滴铅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間矮固,已是汗流浹背失息。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留档址,地道東北人盹兢。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像守伸,于是被迫代替她去往敵國和親绎秒。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,722評論 2 345

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