2016-03-08 36 views
5

所以我在計算員工流失率。開始看起來很簡單的任務是一個有挑戰性的事情(對我來說很簡單,我是一名人力資源專業人員)。用R計算員工流失

我可以找到列的計數和總和,但我在計算中使用這些值時遇到了問題。我已經嘗試過使用count,length和xtabs函數搞亂了,但一直不成功。我認爲我可以將數據拆分成子集,但我認爲這不是要走到這裏的路。

下面是我想找到

#Running_terminations <- 

應該是(在1月終端)+(以月2終端)... /月#

#Running_headcount <- 

應(在1月員工人數)+(在第2個月員工人數)個月

#Annual_turnover <- 

(運行終端/運行人數)的... /#* 12

As Of  Status  Gender Type 
1/31/2015 Termination Male  A 
1/31/2015 Active  Female A 
1/31/2015 Active  Male  B 
1/31/2015 Active  Female B 
1/31/2015 Active  Male  A 
2/29/2015 Active  Female A 
2/29/2015 Active  Male  B 
2/29/2015 Active  Female B 
2/29/2015 New Hire  Male  A 
2/29/2015 Termination Female A 
3/31/2015 Active  Male  B 
3/31/2015 Active  Female B 
3/31/2015 Active  Male  A 
3/31/2015 Termination Female A 
3/31/2015 Active  Male  B 
在運行週轉3月(2015年3月31日)的上述採樣數據

所以將如下所示,

Running_terminations =(1 + 1 + 1)/ 3 = 1

Running_headcount =(4 + 3 + 4)/ 3 = 3.7 注意,只有狀態 「活動」 中的人頭計數

Annual_turnover =(1/3.7)×100 = 27%

一旦我得到的基本知識的方式進行,我想是能夠計算由性別營業額,或類型,或兩者按性別並鍵入。

非常感謝您閱讀這一點。

編輯:

如果有幫助,這是我做的的Tableau計算。

Running Terminations (YTD) = zn(WINDOW_AVG((([Termination])),-11,0)) 
Running Headcount (YTD) = zn(WINDOW_AVG((([Active])),-11,0)) 
Annual Turnover (YTD) = (ZN(([Running Terminations])/[Running Headcount]))*12 

所以我首先計算運行至今每月週轉率,然後通過12

乘以它我做了有關計算運行平均值更多的閱讀,我發現就在這裏提示如下功能的用戶。

ma <- function(x,n=5){filter(x,rep(1/n,n), sides=2)} 

現在我試圖將這個應用到我的問題。

我認爲主要的問題是我無法通過'As Of'日期來分類。另一個例子是我想製作一個雙軸圖表來顯示每月的終止和新員工,但我只能得到總計數字並最終繪製點。我如何每月展示一次?

+0

你發現'cumsum'了嗎? – MichaelChirico

+0

我沒有,我一直在努力使用庫馬爾的建議來解決這個問題。我如何使用cumsum通過'As Of'日期獲得全部金額? – Dima

回答

1

您可以重新整理數據以計算每月的活動數和終止數。這裏是代碼:

library(reshape2) 
txt <- "As.Of  Status  Gender Type 
1/31/2015 Termination Male  A 
1/31/2015 Active  Female A 
1/31/2015 Active  Male  B 
1/31/2015 Active  Female B 
1/31/2015 Active  Male  A 
2/29/2015 Active  Female A 
2/29/2015 Active  Male  B 
2/29/2015 Active  Female B 
2/29/2015 New_Hire  Male  A 
2/29/2015 Termination Female A 
3/31/2015 Active  Male  B 
3/31/2015 Active  Female B 
3/31/2015 Active  Male  A 
3/31/2015 Termination Female A 
3/31/2015 Active  Male  B" 

dataSet <- read.table(textConnection(txt), header=TRUE) 
dataSet$As.Of <- as.Date(dataSet$As.Of, format="%m/%d/%y") 
dataSet$As.Of.Month <- format(dataSet$As.Of, "%m") 

dataSetAgg <- dcast(dataSet, As.Of.Month ~ Status, fun.aggregate = length, value.var="As.Of.Month") 
Running_terminations <- sum(dataSetAgg$Termination)/nrow(dataSetAgg) 
Running_headcount <- sum(dataSetAgg$Active)/nrow(dataSetAgg) 
Annual_turnover <- (Running_terminations/Running_headcount)*100 

希望這有助於。

+0

非常感謝!明天會試試看,並回復。 – Dima

+0

當然。樂於幫助。 –

+0

這非常有幫助,我已經能夠將其應用於我的數據。我現在的問題是,我希望能夠按照常規人數(按月)計算總人數,而你提出的解決方案只能讓我回到一個點。我已經讀過「ma < - function(x,n = 5){filter(x,rep(1/n,n),sides = 2)}」作爲滾動平均值的解決方案,我遇到了一些困難將它應用到我的案例 – Dima

1

使用基本功能,您可以通過給庫馬爾同一數據集使用

rslt <- table(dataSet$Status)/length(unique(dataSet$As.Of)) 


現在你的結果是

rslt["Active"] 
Active 
3.666667 

rslt["Termination"] 
Termination 
1 

turnover <- 100/rslt["Active"]