2016-11-24 6 views
1

dplyrを使用してマルチプルデータフレームを関数に渡し、要約変数を含むデータフレームを返すことを望みます。私はこれを集計レベルで問題なく行うことができますが、ファクタでグループ化しようとすると、関数は全体の集計に対して同じ値を返します。ここで私はそれが正常に動作している必要があり一例である。フレームを関数として渡すとき、dplyrのグループで変数を集計できません

compCalc <- function(frame,segment) { 
    newFrame <- frame %>% 
    summarise(seg = segment, 
      FTEs = sum(FTEs), 
      total_TCC = sum(frame$totalCompensationCost), 
      TCC_per_fte = sum(frame$totalCompensationCost)/sum(frame$FTEs), 
      TCC_per_hour = sum(frame$totalCompensationCost)/sum(frame$hours), 
      total_wages = sum(frame$totalWages)) 
return(newFrame) 
} 

は、私はそのようにのような関数を呼び出す:

nuSectorOverall <- compCalc(dfEx, "allNonUnion") 

と私はこのような素敵な出力が得られます。

Overall 
seg   FTEs  total_TCC TCC_per_fte TCC_per_hour total_wages 
allNonUnion 3980.559 185865849  46693.4  24.09153  171344280 

今とき次のようにgroup_by句をミックスに導入します。

compCalcEmp <- function(frame,segment) { 
    newFrame <- frame %>% 
     group_by(employeeGroup) %>% 
      summarise(seg = segment, 
       FTEs = sum(FTEs), 
       total_TCC = sum(frame$totalCompensationCost), 
       TCC_per_fte = sum(frame$totalCompensationCost)/sum(frame$FTEs), 
       TCC_per_hour = sum(frame$totalCompensationCost)/sum(frame$hours), 
       total_wages = sum(frame$totalWages)) 
      return(newEmpFrame) 
    } 
あなたはそれがのFTEを除いて、各グループ化変数の同じ値を計算している見ることができるように

employeeGroup  seg  FTEs total_TCC TCC_per_fte TCC_per_hour  total_wages total_wages_per_fte 
       <chr> <chr>  <dbl>  <dbl>  <dbl>  <dbl>   <dbl>    <dbl> 
1  Bargaining Unit overall 139.2841 185865849  46693.4  24.09153  171344280   43045.28 
2 Management & Excluded overall 402.0311 185865849  46693.4  24.09153 171344280   43045.28 
3    Non-Union overall 3439.2438 185865849  46693.4  24.09153 171344280   43045.28 

は、私は次のような問題に遭遇します!

私はそれに似た質問があるかどうかは分かりませんでした。私はそれが見つからなければ謝ります。どんな助けも非常に高く評価されるでしょう!

あなたはdplyr管内frameの列を参照するためにframe$を使用したくないすべてのベスト、

R

答えて

1

。代わりにこれを試してみてください。その場合にはあなたがサブセットのグループによって全体frameなくに関して要約されているので

compCalcEmp <- function(frame,segment) { 
    newFrame <- frame %>% 
     group_by(employeeGroup) %>% 
      summarise(seg = segment, 
       FTEs = sum(FTEs), 
       total_TCC = sum(totalCompensationCost), 
       TCC_per_fte = sum(totalCompensationCost)/sum(FTEs), 
       TCC_per_hour = sum(totalCompensationCost)/sum(hours), 
       total_wages = sum(totalWages)) 
    return(newFrame) 
} 

それはgroup_byずに前に働いていました。

+0

これはうまくいった!私を助けるために時間をかけてくれてありがとう!ほんとうにありがとう! – robbieNukes

関連する問題