เทคนิคการใช้ dplyr ในการสร้างคอลัมน์ใหักับ data frame พร้อมทั้งการประยุกต์ใช้ dplyr กับ ggplot2 เพื่อนำเอาผลที่ได้จาก dplyr ไปใช้งานต่อในการสร้างกราฟ
ดาวน์โหลดไฟล์ตัวอย่างได้ที่ ► https://goo.gl/OFkER3
เชิญสมัครเป็นสมาชิกของช่องนี้ได้ที่ ► https://www.youtube.com/subscription_center?add_user=prasertcbs
วิเคราะห์ข้อมูลด้วย R ► https://www.youtube.com/playlist?list=PLoTScYm9O0GFYFj7oWadDNklkveS6tFIo
การใช้โปรแกรม R เบื้องต้น ► https://www.youtube.com/playlist?list=PLoTScYm9O0GGSiUGzdWbjxIkZqEO-O6qZ
สอนการเขียนโปรแกรมด้วยภาษา R เบื้องต้น ► https://www.youtube.com/playlist?list=PLoTScYm9O0GF6qjrRuZFSHdnBXD2KVICp
สอน R สำหรับ Data Science ► https://www.youtube.com/playlist?list=PLoTScYm9O0GGat89RT9NMjW7sqFz84XSk
การสร้างกราฟด้วยโปรแกรม R เบื้องต้น ► https://www.youtube.com/playlist?list=PLoTScYm9O0GEvw9bN_Q8nRdDUPyaSymqM
การสร้างกราฟด้วย ggplot2 ► https://www.youtube.com/playlist?list=PLoTScYm9O0GFEu7flht1Fv_gsT2mizgPW
การใช้ dplyr package ► https://www.youtube.com/playlist?list=PLoTScYm9O0GEsJv4E4QmrBkdyax2IgRQG
การใช้ tidyr package ► https://www.youtube.com/playlist?list=PLoTScYm9O0GFL9f4LpDa0zrh-rqzF3xdN
#prasertcbs #prasertcbs_R #prasertcbs_DataScience #prasertcbs_stat
Search
mutate r 在 Re: [問題] dplyr 與mutate用法- 看板R_Language - 批踢踢實業坊 的八卦
※ 引述《huangsam (sam)》之銘言:
: [問題類型]:
:
: 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來)
:
: [軟體熟悉度]:
: 請把以下不需要的部份刪除
: 入門(寫過其他程式,只是對語法不熟悉)
:
: [問題敘述]:
: 請簡略描述你所要做的事情,或是這個程式的目的
: 想要用dplyr中的mutate 搭配迴圈使用或是大家有更好的想法
: 下方並無法將column1....改變只會產生新的欄位i
: [程式範例]:
:
: 想要用dplyr中的mutate做迴圈舉例如下
: x <- c("column1","column2", "column3",....)
: 總共可能有100個欄位其中有10個欄位是時間格式,目前我是用
: data %>% mutate(column1 = as.POSIXct....
: column2 = as.POSIXct....
: .
: .
: column10 = as.POSIXct...)
: for (i in x)
: {
: data %>% mutate( i = as.POSIXct(as.numeric(i)*(60*60*24), origin="1899-12-30"
: , tz="UCT") )
: }
:
: [環境敘述]:
:
:
: [關鍵字]:
:
: dplyr , mutate
:
好讀版:https://pastebin.com/vQbFHfxm
library(dplyr)
minDate <- as.POSIXct("1990-01-01")
N <- 1000
p <- 100
dat <- lapply(1:p, function(x) {
if (x > p*0.1){
rnorm(N)
} else {
as.integer(Sys.time()) - sample(2e8, N)
}
}) %>% `names<-`(paste0("V", 1:p)) %>% as_data_frame
possibleTimeCols <- sapply(dat[1, ], function(x){
as.POSIXct(x, origin = "1970-01-01", tz = "Asia/Taipei") >= minDate
}) %>% {names(.)[.]}
datOut <- dat %>% mutate_each_(funs(as.POSIXct(., origin = "1970-01-01",
tz = "Asia/Taipei")), vars = possibleTimeCols)
print(datOut)
# Source: local data frame [1,000 x 100]
#
# V1 V2 V3
# <time> <time> <time>
# 1 2011-12-15 20:55:45 2012-04-18 23:16:08 2012-10-13 13:38:58
# 2 2013-03-15 11:05:22 2013-07-28 18:11:49 2011-03-26 14:46:51
# 3 2015-03-03 13:54:22 2011-06-18 05:31:24 2012-03-26 14:53:00
# 4 2015-11-03 01:30:12 2011-11-02 01:21:49 2013-11-05 15:16:48
# 5 2012-11-18 12:06:22 2012-04-05 16:28:43 2010-09-12 14:24:42
# 6 2012-01-24 03:38:18 2014-11-09 11:54:44 2016-05-30 21:50:26
# 7 2010-08-03 22:27:15 2016-01-04 00:05:41 2014-02-16 00:53:00
# 8 2013-05-14 12:44:14 2011-12-24 22:13:11 2012-01-17 18:22:01
# 9 2011-05-14 16:28:25 2011-04-23 07:36:51 2011-05-01 04:31:10
# 10 2010-07-02 17:25:18 2010-08-26 05:15:27 2013-12-31 21:10:19
# data.table解法
library(data.table)
library(pipeR)
minDate <- as.POSIXct("1990-01-01")
N <- 1000
p <- 100
dat <- lapply(1:p, function(x) {
if (x > p*0.1){
rnorm(N)
} else {
as.integer(Sys.time()) - sample(2e8, N)
}
}) %>>% as.data.table
possibleTimeCols <- sapply(dat[1, ], function(x){
as.POSIXct(x, origin = "1970-01-01", tz = "Asia/Taipei") >= minDate
}) %>>% (names(.)[.])
dateDT <- dat[ , lapply(.SD, function(x) as.POSIXct(x, origin = "1970-01-01",
tz = "Asia/Taipei")) ,
.SDcols = possibleTimeCols]
dat[ , `:=`(eval(possibleTimeCols), dateDT)] %>>% print
# V1 V2 V3
# 1: 2014-04-29 22:17:22 2013-07-12 11:37:04 2013-12-19 13:01:16
# 2: 2010-11-15 19:23:53 2016-01-28 05:17:19 2013-06-16 15:04:38
# 3: 2013-04-14 18:16:29 2012-10-25 07:32:09 2012-09-30 05:00:31
# 4: 2010-10-19 02:10:24 2015-04-02 19:09:34 2012-09-11 20:30:54
# 5: 2012-09-10 02:39:22 2014-05-18 23:02:04 2015-11-19 21:44:06
# ---
# 996: 2016-09-20 12:48:47 2016-10-08 11:42:33 2013-08-07 23:56:46
# 997: 2011-12-19 12:23:57 2011-01-23 02:55:16 2015-12-25 23:17:27
# 998: 2013-08-29 22:00:48 2013-07-16 04:39:07 2014-03-17 08:53:01
# 999: 2011-11-13 19:55:30 2010-08-08 16:43:12 2012-01-24 10:58:16
# 1000: 2015-08-07 16:55:23 2015-11-22 21:17:57 2014-03-05 10:13:36
--
R資料整理套件系列文:
magrittr #1LhSWhpH (R_Language) https://tinyurl.com/j3ql84c
data.table #1LhW7Tvj (R_Language) https://tinyurl.com/hr77hrn
dplyr(上) #1LhpJCfB (R_Language) https://tinyurl.com/jtg4hau
dplyr(下) #1Lhw8b-s (R_Language)
tidyr #1Liqls1R (R_Language) https://tinyurl.com/jq3o2g3
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.246.31.159
※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1476359736.A.31C.html
※ 編輯: celestialgod (111.246.31.159), 10/13/2016 20:12:21
其實`names<-`是一個函數,下面兩個是相等的
x %>>% `names<-`(nn)
names(x) <- nn
只是圈起來告訴R這是函數
※ 編輯: celestialgod (111.246.31.159), 10/14/2016 19:37:58
... <看更多>