R Language Identificazione e raggruppamento per esecuzioni in base R


Esempio

Si potrebbe desiderare di raggruppare i propri dati con le analisi di una variabile ed eseguire una sorta di analisi. Si consideri il seguente set di dati semplice:

(dat <- data.frame(x = c(1, 1, 2, 2, 2, 1), y = 1:6))
#   x y
# 1 1 1
# 2 1 2
# 3 2 3
# 4 2 4
# 5 2 5
# 6 1 6

La variabile x ha tre esecuzioni: una corsa di lunghezza 2 con valore 1, una corsa di lunghezza 3 con valore 2 e una corsa di lunghezza 1 con valore 1. Potremmo voler calcolare il valore medio della variabile y in ognuna delle corse di variabile x (questi valori medi sono 1.5, 4 e 6).

Nella base R, dovremmo prima calcolare la codifica run-length della variabile x usando rle :

(r <- rle(dat$x))
# Run Length Encoding
#   lengths: int [1:3] 2 3 1
#   values : num [1:3] 1 2 1

Il prossimo passo è calcolare il numero di esecuzione di ogni riga del nostro set di dati. Sappiamo che il numero totale di esecuzioni è di length(r$lengths) e la lunghezza di ogni corsa è di r$lengths , quindi possiamo calcolare il numero di esecuzioni di ciascuna delle nostre esecuzioni con rep :

(run.id <- rep(seq_along(r$lengths), r$lengths))
# [1] 1 1 2 2 2 3

Ora possiamo usare tapply per calcolare il valore y medio per ogni corsa raggruppando sull'id di esecuzione:

data.frame(x=r$values, meanY=tapply(dat$y, run.id, mean))
#   x meanY
# 1 1   1.5
# 2 2   4.0
# 3 1   6.0