HOWTO · R

Usa la funzione diff in R

Questo tutorial mostra come usare la funzione diff() in R

In questa pagina

La funzione diff() di R sottrae i valori precedenti da quelli successivi in un vettore numerico o in una serie temporale. Per impostazione predefinita, confronta ogni valore con quello immediatamente precedente. Puoi modificare la distanza con lag, ripetere l’operazione con differences oppure usare entrambi gli argomenti. Gli esempi seguenti usano un solo vettore, così puoi confrontare come ciascuna impostazione modifica il risultato.

Che cosa calcola diff()

Per un vettore x, diff(x) restituisce le differenze tra coppie di valori successivi: x[2] - x[1], x[3] - x[2] e così via. La sottrazione procede dalla posizione precedente a quella successiva: un aumento produce un risultato positivo, mentre una diminuzione produce un risultato negativo. La funzione accetta vettori numerici e oggetti di serie temporali; restituisce le differenze senza modificare l’input.

Uso di base di diff()

Esegui questo esempio:

Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

x <- c(20, 22, 21, 23, 25)
cat("basic: ", paste(diff(x), collapse = " "), "\n", sep = "")
cat("lag 2: ", paste(diff(x, lag = 2), collapse = " "), "\n", sep = "")
cat("differences 2: ", paste(diff(x, differences = 2), collapse = " "), "\n", sep = "")
cat("lag 2, differences 2: ", paste(diff(x, lag = 2, differences = 2), collapse = " "), "\n", sep = "")
basic: 2 -1 2 2
lag 2: 1 1 4
differences 2: -3 3 0
lag 2, differences 2: 3

Il primo risultato confronta valori adiacenti in x: per esempio, 22 - 20 dà 2 e 21 - 22 dà -1. Le etichette nell’output indicano le impostazioni usate nei confronti successivi; restano in inglese perché fanno parte del blocco di output invariato.

Confrontare i valori con lag

Il valore predefinito di lag è 1. Impostando lag = 2, ogni valore viene confrontato con quello di due posizioni prima, per esempio x[3] - x[1] e poi x[4] - x[2]. Nell’esempio, i risultati sono 1, 1 e 4. È utile quando conta la distanza tra le osservazioni, per esempio per confrontare valori separati da due intervalli temporali. La funzione non riempie le posizioni precedenti alla prima coppia possibile.

Calcolare differenze ripetute con differences

Il valore predefinito di differences è 1, quindi viene eseguito un solo passaggio di sottrazione. Con differences = 2, R applica di nuovo diff() al primo risultato. Per x, il primo passaggio produce 2, -1, 2, 2; il passaggio successivo confronta gli elementi adiacenti di quel vettore e restituisce -3, 3, 0. Si tratta di differenze seconde, non dei valori originali né delle differenze del primo passaggio. Gli ordini superiori ripetono il procedimento: ogni passaggio opera sul risultato del precedente.

Combinare lag e differences

I due argomenti si possono impostare nella stessa chiamata. Con lag = 2 e differences = 2, R confronta prima i valori distanti due posizioni, ottenendo 1, 1, 4, poi calcola le differenze con distanza 2 su quel risultato, ottenendo 3. Quindi, lag stabilisce la distanza usata a ogni passaggio, mentre differences stabilisce quanti passaggi eseguire. Il risultato combinato è più corto perché a ogni passaggio devono restare abbastanza posizioni per la distanza richiesta.

Interpretare la lunghezza del risultato

Ogni differenza richiede una coppia di valori in input, quindi, quando è possibile formare una coppia, la chiamata restituisce meno elementi dell’input. Per un vettore di lunghezza n, una distanza L intera positiva e un ordine k intero positivo, la lunghezza del risultato è max(n - L * k, 0). Nell’esempio, l’input contiene cinque valori: la chiamata predefinita ne restituisce quattro, mentre due passaggi con distanza due ne restituiscono uno. La lunghezza ridotta non dipende dal fatto che l’ultimo elemento sia inutilizzabile: deriva dalla formazione di coppie alla distanza richiesta nei passaggi successivi. Scegli una distanza e un ordine che lascino abbastanza confronti per ottenere il risultato desiderato.