Sto cercando di capire gli argomenti per gather
nel pacchetto tidyr
.In tidyr, quali criteri usa la funzione `gather` per mappare un dataframe da ampio a lungo?
ho guardato la documentazione, e la sintassi si presenta come:
gather(data, key, value, ..., na.rm = FALSE, convert = FALSE)
C'è un example nei file di aiuto:
stocks <- data.frame(
time = as.Date('2009-01-01') + 0:9,
X = rnorm(10, 0, 1),
Y = rnorm(10, 0, 2),
Z = rnorm(10, 0, 4)
)
gather(stocks, stock, price, -time)
Sono curioso di sapere l'ultima riga:
gather(stocks, stock, price, -time)
Qui, stocks
sono chiaramente i dati che vogliamo modificare, il che va bene.
Quindi posso leggere che stock
e price
sono argomenti per una coppia di valori chiave - ma in che modo questa funzione decide come selezionare le colonne per creare questa coppia di valori chiave? Il dataframe originale si presenta così:
time X Y Z
2009-01-01 1.10177950 -1.1926213 -7.4149618
2009-01-02 0.75578151 -4.3705737 -0.3117843
2009-01-03 -0.23823356 -1.3497319 3.8742654
2009-01-04 0.98744470 -4.2381224 0.7397038
2009-01-05 0.74139013 -2.5303960 -5.5197743
non vedo alcuna indicazione che dovremmo utilizzare qualsiasi combinazione di X
, Y
o Z
. Quando sto usando questa funzione, mi sento come se stessi scegliendo i nomi per quello che voglio siano le colonne nel mio lungo dataframe formattato, e pregando che gather
funzioni magicamente. Vieni a pensarci, mi sento allo stesso modo quando uso melt
.
gather
guarda il tipo di colonna? Come si mappa da ampio a lungo?
EDIT Grande risposta qui sotto, grande discussione di seguito, e per chiunque altro che vogliono più informazioni sulla filosofia e uso del pacchetto tidyr
dovrebbe assolutamente leggere questo paper, anche se la vignetta non spiega la sintassi.
Il '' tempo' dice di usare tutte le colonne tranne il tempo. Un altro approccio sarebbe utilizzare 'gather (stocks, stock, value, X: Z)', se si preferisce specificare quali colonne devono essere "raccolte". O anche, 'raccogliere (scorte, azioni, valore, X, Y, Z)'. Essenzialmente, questo è più come usare l'argomento 'melt' con' measure.vars' invece di specificare 'id.vars' (' melt (stocks, measure.vars = c ("X", "Y", "Z")) '). – A5C1D2H2I1M1N2O1R2T1