作者dreamreader (健康第一)
看板R_Language
标题Re: [问题] plyr
时间Fri Jul 3 11:48:13 2015
应该可以写得更简洁,但这应该是你想要的,看不懂的话,可以google一下spread的用法
library(tidyr)
library(dplyr)
df <- data.frame(id = rep(LETTERS[1:5],4),
year = rep(2011:2014, 5),
cost= sample(200:500, 20))
long <- df %>% group_by(id, year) %>% summarize(count=n(), amount=sum(cost))
%>% ungroup()
count_wide <- long %>% select(id, year, count) %>%
mutate(year=paste0("count_", year)) %>% spread(year, count)
cost_wide <- long %>% select(id, year, amount) %>%
mutate(year=paste0("amount_", year)) %>% spread(year, amount)
total_wide <- df %>% group_by(id) %>% summarize(total_count = n(), total_cost
= sum(cost))
wide <- count_wide %>% left_join(cost_wide, "id") %>% left_join(total_wide,
"id")
※ 引述《psinqoo (零度空间)》之铭言:
: 延伸问题
: 原始资料
: id year cost
: D 2012 120
: E 2013 300
: F 2014 200
: A 2015 155
: E 2011 200
: F 2014 160
: B 2013 165
: B 2015 185
: C 2012 350
: A 2014 310
: E 2014 225
: F 2015 175
: 想变成这样子
: ID 12计数 13计数 14计数 15计数 2012金额 2013金额 2014金额 2015金额 总计数 总金额
: A
: B
: C
: D
: E
: F
: 虽然 资料量少 EXCEL 可以计算
: 我想知道R 是否也能用少量语法做到
: ※ 引述《celestialgod (攸蓝)》之铭言:
: : 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())
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 69.255.1.0
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1435895295.A.12A.html
※ 编辑: dreamreader (69.255.1.0), 07/03/2015 11:52:59
1F:→ celestialgod: 囧, dcast一行解决... 07/03 11:55
2F:→ dreamreader: 立刻来学一下dcast哈 07/03 11:59