管道函數(%>%)很簡單


%>%來自dplyr包的管道函數,其作用是將前一步的結果直接傳參給下一步的函數,從而省略了中間的賦值步驟,可以大量減少內存中的對象,節省內存

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

x %>% f(y) 等同於 f(x, y) y %>% f(x, ., z) 等同於 f(x, y, z )
直接上栗子🌰:
library(data.table) library(tidyr) # 先虛構一數據框 set.seed(1) date <- as.Date('2016-11-01') + 0:14 hour <- sample(1:24, 15) min <- sample(1:60, 15) second <- sample(1:60, 15) event <- sample(letters, 15) data <- data.table(date, hour, min, second, event) head(data)[0:2]
##          date hour min second event
## 1: 2016-11-01    7  30     29     u
## 2: 2016-11-02    9  43     36     a
typeof(data)
## [1] "list"

------------------------------------------管道函數(%>%)很簡單-------------------------
# 把date,hour,min和second列合並為新列datetime # R中的日期時間格式為"Year-Month-Day-Hour:Min:Second" #(一)(%>%) 合着寫 dataNew <- data %>%unite(datehour, date, hour, sep = ' ') %>%unite(datetime, datehour, min, second, sep = ':') dataNew
##                datetime event
##  1:  2016-11-01 7:30:29     u
##  2:  2016-11-02 9:43:36     a
##  3: 2016-11-03 13:58:60     l
##  4: 2016-11-04 20:22:11     q
##  5:  2016-11-05 5:44:47     p
##  6: 2016-11-06 18:52:37     k
##  7: 2016-11-07 19:12:43     r
##  8:  2016-11-08 12:35:6     i
##  9:  2016-11-09 11:7:38     e
## 10:  2016-11-10 1:14:21     b
## 11:  2016-11-11 3:20:42     w
## 12:  2016-11-12 14:1:32     t
## 13: 2016-11-13 23:19:52     h
## 14: 2016-11-14 21:41:26     s
## 15:  2016-11-15 8:16:25     o
# #(二)(%>%) 分步寫
dataNew <- data %>%unite(datehour, date, hour, sep = ' '); dataNew
##          datehour min second event
##  1:  2016-11-01 7  30     29     u
##  2:  2016-11-02 9  43     36     a
##  3: 2016-11-03 13  58     60     l
##  4: 2016-11-04 20  22     11     q
##  5:  2016-11-05 5  44     47     p
##  6: 2016-11-06 18  52     37     k
##  7: 2016-11-07 19  12     43     r
##  8: 2016-11-08 12  35      6     i
##  9: 2016-11-09 11   7     38     e
## 10:  2016-11-10 1  14     21     b
## 11:  2016-11-11 3  20     42     w
## 12: 2016-11-12 14   1     32     t
## 13: 2016-11-13 23  19     52     h
## 14: 2016-11-14 21  41     26     s
## 15:  2016-11-15 8  16     25     o
dataNew %>% unite(datetime, datehour, min, second, sep = ':')
##                datetime event
##  1:  2016-11-01 7:30:29     u
##  2:  2016-11-02 9:43:36     a
##  3: 2016-11-03 13:58:60     l
##  4: 2016-11-04 20:22:11     q
##  5:  2016-11-05 5:44:47     p
##  6: 2016-11-06 18:52:37     k
##  7: 2016-11-07 19:12:43     r
##  8:  2016-11-08 12:35:6     i
##  9:  2016-11-09 11:7:38     e
## 10:  2016-11-10 1:14:21     b
## 11:  2016-11-11 3:20:42     w
## 12:  2016-11-12 14:1:32     t
## 13: 2016-11-13 23:19:52     h
## 14: 2016-11-14 21:41:26     s
## 15:  2016-11-15 8:16:25     o
# #(三)不用%>%也能寫 dt<-unite(data,datehour, date, hour, sep = ' ') dt
##          datehour min second event
##  1:  2016-11-01 7  30     29     u
##  2:  2016-11-02 9  43     36     a
##  3: 2016-11-03 13  58     60     l
##  4: 2016-11-04 20  22     11     q
##  5:  2016-11-05 5  44     47     p
##  6: 2016-11-06 18  52     37     k
##  7: 2016-11-07 19  12     43     r
##  8: 2016-11-08 12  35      6     i
##  9: 2016-11-09 11   7     38     e
## 10:  2016-11-10 1  14     21     b
## 11:  2016-11-11 3  20     42     w
## 12: 2016-11-12 14   1     32     t
## 13: 2016-11-13 23  19     52     h
## 14: 2016-11-14 21  41     26     s
## 15:  2016-11-15 8  16     25     o
dt2<-unite(dt,datatime,datehour, min, second, sep = ':') dt2
##                datatime event
##  1:  2016-11-01 7:30:29     u
##  2:  2016-11-02 9:43:36     a
##  3: 2016-11-03 13:58:60     l
##  4: 2016-11-04 20:22:11     q
##  5:  2016-11-05 5:44:47     p
##  6: 2016-11-06 18:52:37     k
##  7: 2016-11-07 19:12:43     r
##  8:  2016-11-08 12:35:6     i
##  9:  2016-11-09 11:7:38     e
## 10:  2016-11-10 1:14:21     b
## 11:  2016-11-11 3:20:42     w
## 12:  2016-11-12 14:1:32     t
## 13: 2016-11-13 23:19:52     h
## 14: 2016-11-14 21:41:26     s
## 15:  2016-11-15 8:16:25     o


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM