[問題] 請問該怎麼寫讓函式更有彈性?
[問題敘述]:
版上前輩大家晚安~
假設我的原始資料欄位有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://www.ptt.cc/bbs/R_Language/M.1488994480.A.FF7.html
※ 編輯: locka (36.224.203.48), 03/09/2017 01:38:41
→
03/09 07:17, , 1F
03/09 07:17, 1F
推
03/09 07:18, , 2F
03/09 07:18, 2F
→
03/09 07:19, , 3F
03/09 07:19, 3F
→
03/09 07:20, , 4F
03/09 07:20, 4F
→
03/09 09:49, , 5F
03/09 09:49, 5F
→
03/09 20:32, , 6F
03/09 20:32, 6F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):
R_Language 近期熱門文章
PTT數位生活區 即時熱門文章