看板 R_Language 關於我們 聯絡資訊
library(plyr) library(dplyr) set.seed(1) d <- data.frame(year = rep(2000:2002, each = 3), count = round(runif(9, 0, 20))) ddply(d, "year", summarise, tol = sum(count), count_year = n()) # year tol count_year # 1 2000 23 3 # 2 2001 40 3 # 3 2002 45 3 # 單純用plyr做 set.seed(1) d <- data.frame(year = rep(2000:2002, each = 3), count = round(runif(9, 0, 20))) d$ones = 1 ddply(d, "year", summarise, tol = sum(count), count_year = sum(ones)) # 用dplyr + magrittr library(dplyr) library(magrittr) set.seed(1) d <- data.frame(year = rep(2000:2002, each = 3), count = round(runif(9, 0, 20))) d %>% group_by(year) %>% summarise(tol = sum(count), count_year = n()) ※ 引述《psinqoo (零度空間)》之銘言: : [問題類型]:: : 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來) : [軟體熟悉度]: : 請把以下不需要的部份刪除 : 使用者(已經有用R 做過不少作品) : [問題敘述]: : 請簡略描述你所要做的事情,或是這個程式的目的 : set.seed(1) : d<- data.frame(year = rep(2000:2002, each = 3),3+ count = round(runif(9, 0, 20))) : print(d) : 資料長這樣 : year count : 1 2000 5 : 2 2000 7 : 3 2000 11 : 4 2001 18 : 5 2001 4 : 6 2001 18 : 7 2002 19 : 8 2002 13 : 9 2002 13 : ddply(d, "year", summarise, tol = sum(count)) : 會變這樣子 : year tol : 1 2000 23 : 2 2001 40 : 3 2002 45 : 但我想讓它變 : year tol 計數 : 1 2000 23 3 : 2 2001 40 3 : 3 2002 45 3 : 3<-代表 2000 出現三次 : 該如何改寫? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.163.7.242 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1435757688.A.FFA.html
psinqoo: 加library(dplyr) 才能用 count_year = n() 07/01 22:45
psinqoo: 謝謝 celestialgod 07/01 22:47
obarisk: 這兩個交雜用,很容易有錯 07/01 23:38
只要先library(plyr),再library(dplyr) 通常不太有問題 重複的function會被蓋過,不懂obarisk大大指的是哪方面的錯
obarisk: script還好,寫成package就... 07/02 19:47
寫成package重複的指令前面 就加上namespace去指定使用哪一個套件 這樣應該還好。 ※ 編輯: celestialgod (111.248.28.53), 07/02/2015 20:54:20
obarisk: 恩,有好習慣就沒問題 07/02 22:55