2016-03-08 15 views
5

so versuche ich, Mitarbeiterfluktuation zu berechnen. Was als scheinbar einfache Aufgabe begann, erweist sich als etwas herausfordernd (gehen Sie auf mich, ich bin ein HR-Profi).Berechnung der Mitarbeiterfluktuation mit R

Ich kann zählen und Summen der Spalten, aber ich habe Probleme mit diesen Werten in Berechnungen. Ich habe versucht, mit den Zähl-, Längen- und Xtabs-Funktionen herumzuspielen, war aber nicht erfolgreich. Ich denke, ich kann die Daten in Teilmengen aufteilen, aber ich denke nicht, dass das der richtige Weg ist.

Unten ist das, was ich soll

#Running_terminations <- 

zu finden versuchen (Abbrüche im Monat 1) + (Abbrüche im Monat 2) .../Anzahl der Monate

#Running_headcount <- 

sein sollte (Anzahl der Mitarbeiter im Monat 1) + (Anzahl der Mitarbeiter im Monat 2) .../Anzahl der Monate

#Annual_turnover <- 

(Lauf Abschlüsse/Running Mitarbeiterzahl) * 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 

So in den Beispieldaten über den laufenden Umsatz ab März (2015.03.31) aussehen würde wie folgt

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

Running_headcount = (4 + 3 + 4)/3 = 3,7 Hinweis, nur Status "Aktiv" ist in der Mitarbeiterzahl gezählt

Annual_turnover = (1/3,7) * 100 = 27%

Nachdem ich die Grundlagen aus dem Weg zu bekommen, würde ich in der Lage sein möge, den Umsatz nach Geschlecht oder Art oder beides nach Geschlecht zu berechnen und tippen Sie ein.

Vielen Dank für das Lesen so weit.

EDIT:

Wenn es hilft, das ist, wie ich die Berechnung in Tableau tun.

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 

Also zuerst ich einen laufenden YTD monatlichen Umsatzrate berechnet und multipliziert es dann um 12.

ich über die Berechnung-Mittel etwas mehr Lesen hat und ich hier einen Benutzer gefunden auf die folgende Funktion hindeutet.

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

Jetzt versuche ich dies auf mein Problem anzuwenden.

Ich denke, das Hauptproblem ist, dass ich es nicht bekommen kann, Dinge mit dem "Ab" -Datum zu kategorisieren. Ein anderes Beispiel ist, dass ich ein Diagramm mit zwei Achsen machen möchte, um Abschlüsse und Neueinstellungen auf monatlicher Basis zu zeigen, aber ich kann nur aggregierte Zahlen bekommen und Punkte aufzeichnen. Wie kann ich das monatlich zeigen?

+0

Haben Sie 'gefunden noch cumsum'? – MichaelChirico

+0

Ich habe nicht, ich habe versucht, dies mit Kumar Ratschlag zu arbeiten. Wie kann ich cumsum verwenden, um Summen mit "Ab-Datum" zu erhalten? – Dima

Antwort

1

Sie können Ihre Daten so umformen, dass sie Anzahl der aktiven und Anzahl der Abmeldungen pro Monat zählen. Hier ist der Code:

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 

Hoffe das hilft.

+0

Vielen Dank! Werde das morgen ausprobieren und antworten. – Dima

+0

Sicher. Freue mich zu helfen. –

+0

Dies war sehr hilfreich und ich konnte dies auf meine Daten anwenden. Mein Problem ist jetzt, dass ich in der Lage wäre, die Anzahl der rollenden Mitarbeiter neben dem regulären Personalbestand (nach Monat) zu ermitteln, und die von Ihnen präsentierte Lösung bringt mir nur einen Punkt zurück. Ich habe gelesen über "ma <- Funktion (x, n = 5) {Filter (x, rep (1/n, n), Seiten = 2)}" als eine Lösung für gleitende Durchschnitte und ich habe einige Schwierigkeiten Anwenden auf meinen Fall – Dima

1

Mit Basisfunktionalität können Sie

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

auf der gleichen Datenmenge von Kumar gegeben verwenden.
nun Ihre Ergebnisse sind

rslt["Active"] 
Active 
3.666667 

rslt["Termination"] 
Termination 
1 

turnover <- 100/rslt["Active"] 
Verwandte Themen