2016-03-08 18 views
5

quindi sto cercando di calcolare il turnover dei dipendenti. Quello che è iniziato come un compito apparentemente facile si sta rivelando un po 'impegnativo (non esagerare con me, sono un professionista delle risorse umane).Calcolo del turnover dei dipendenti con R

Sono in grado di trovare i conteggi e le somme delle colonne ma ho problemi a utilizzare questi valori nei calcoli. Ho provato a fare i conti con la funzione count, length e xtabs ma non ho avuto successo. Penso di poter dividere i dati in sottoinsiemi, ma non penso che sia il modo di andare qui.

Qui di seguito è quello che sto cercando di trovare

#Running_terminations <- 

dovrebbe essere (terminazioni in mese 1) + (terminazioni in mese 2) .../# di mesi

#Running_headcount <- 

dovrebbe essere (Personale in mesi 1) + (Personale in mesi 2) .../# di mesi

#Annual_turnover <- 

(terminazioni Esecuzione/Running organico) * 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 

Così i dati di esempio sopra il fatturato in esecuzione a partire dal marzo (2015/03/31) apparirebbe come segue,

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

Running_headcount = (4 + 3 + 4)/3 = 3,7 Note, solo stato "attivo" sono conteggiati dell'organico

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

Una volta che ho le basi di mezzo, mi piacerebbe essere in grado di calcolare il fatturato per sesso, o tipo, o entrambi per sesso e scrivi

Mille grazie per aver letto fino a qui.

EDIT:

Se aiuta, questo è come faccio il calcolo in 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 

Così ho calcolato un tasso di fatturato mensile da inizio anno in esecuzione e poi moltiplicato per 12.

ho fatto qualche lettura più sul calcolo medie consecutive e ho trovato un utente su qui che suggerisce la seguente funzione.

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

Ora sto cercando di applicare questo al mio problema.

Penso che il problema principale sia che non riesco a ottenere la classificazione delle cose in base alla data "As Of". Un altro esempio è che voglio creare una trama a due assi per mostrare terminazioni e nuovi assunti su base mensile, ma posso solo ottenere cifre aggregate e finire con i punti di tracciamento. Come posso mostrarlo su base mensile?

+0

Hai trovato 'cumsum' ancora? – MichaelChirico

+0

Non ho, ho cercato di lavorare su questo utilizzando il consiglio di Kumar. Come posso usare cumsum per ottenere somme su tutta la linea entro la data 'As Of'? – Dima

risposta

1

È possibile rimodellare i dati per contare il numero di attivo e il numero di terminazioni al mese. Ecco il codice:

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 

Spero che questo aiuti.

+0

Mille grazie! Ci proveremo domani e risponderemo. – Dima

+0

Sicuro. Felice di aiutare. –

+0

Questo è stato estremamente utile e sono stato in grado di applicare questo ai miei dati. Il mio problema ora è che mi piacerebbe essere in grado di tracciare il conto a rotazione a fianco dell'organico regolare (per mese) e la soluzione che hai presentato mi restituisce solo un punto. Ho letto di "ma <- function (x, n = 5) {filter (x, rep (1/n, n), sides = 2)}" come soluzione alle medie mobili e sto avendo qualche difficoltà applicandolo al mio caso – Dima

1

Utilizzando le funzionalità di base è possibile utilizzare

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

sullo stesso insieme di dati data dal Kumar.
Ora i risultati sono

rslt["Active"] 
Active 
3.666667 

rslt["Termination"] 
Termination 
1 

turnover <- 100/rslt["Active"]