作者celestialgod (攸蓝)
看板R_Language
标题Re: [问题] plyr
时间Wed Jul 1 21:34:45 2015
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://webptt.com/cn.aspx?n=bbs/R_Language/M.1435757688.A.FFA.html
1F:推 psinqoo: 加library(dplyr) 才能用 count_year = n() 07/01 22:45
2F:推 psinqoo: 谢谢 celestialgod 07/01 22:47
3F:→ obarisk: 这两个交杂用,很容易有错 07/01 23:38
只要先library(plyr),再library(dplyr) 通常不太有问题
重复的function会被盖过,不懂obarisk大大指的是哪方面的错
4F:→ obarisk: script还好,写成package就... 07/02 19:47
写成package重复的指令前面
就加上namespace去指定使用哪一个套件
这样应该还好。
※ 编辑: celestialgod (111.248.28.53), 07/02/2015 20:54:20
5F:→ obarisk: 恩,有好习惯就没问题 07/02 22:55