作者locka (locka)
看板R_Language
标题[问题] 怎麽写可以让函式比较有弹性
时间Thu Mar 9 01:34:38 2017
[问题叙述]:
版上前辈大家晚安~
假设我的原始资料栏位有year,month,weekday,y等栏位
我想要对他重复做一样的事情
(根据不同的栏位grouping,计算每组的数量,组内y的平均然後画图)
因为差别只在於grouping的栏位不同,所以在想说可不可以用函数包起来
ex:
df_group_fn(df,"year","month") >>> 回传以year,month栏位grouping後计算的结果
df_group_fn(df,"month","weekday") >>> 回传以month,weekday分组後计算的结果
也就是只要输入该data frame跟要grouping的栏位
就可以直接回传整理好的结果
原本想要用dplyr做,大概像下面这样:
df_group_fn <- function(df,col_1,col_2){
df %>% group_by(col_1,col_2) %>% summarise(count=n(),avg=mean(y)) %>%
ggplot(aes(mean,n)+geom_point()
}
不过会卡在指定栏位参数因为是字串的关系, 在group_by那边会有问题
所以试着改用data.table的写法:
df_group_fn <- function(df,col_1,col_2){
df <- as.data.table(df)
df[,`:=`(count=.N, avg=mean(y)),by=c(col_1,col_2)]
...
}
可是data.table不会像dplyr一样
产生只留下grouping跟summarise栏位的dataframe
他是在原始的data里面新增栏位,这样我就不知道怎麽画图了...
总结我的问题:
1. 希望有高手可以指点用dplyr跟data.table把function写得更有弹性的方法
2. 如果我今天不想把grouping的栏位数量写死,
(例如我输入"year"它就只根据year栏位分组,
输入"year","month","weekday"就根据那三个栏位分组,该怎麽做呢?
3. 最後想问大家实务上会这麽做吗? 很希望可以听到版上大家分享!!
先谢谢各位版上先进了 m(_ _)m
[关键字]:
function, data.table, grouping
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.224.203.48
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1488994480.A.FF7.html
※ 编辑: locka (36.224.203.48), 03/09/2017 01:38:41
1F:→ cywhale: 把栏位当变数传若是用字串的栏位名 到function内可get(v) 03/09 07:17
3F:→ cywhale: 可以参考上面连结3... 若是只留下分组结果不要接在原DT 03/09 07:19
4F:→ cywhale: 可以.. %>% .[,{.(out1=sum(A),out2=mean(A))},by=grp] 03/09 07:20
5F:→ carl090105: dplyr用字串请使用group_by_(.dots=c(...)) 03/09 09:49
6F:→ locka: 感谢上面两位cywhale跟carl大!连结很值得参考!! 03/09 20:32