2013-08-01 5 views
29

Apparentemente nella mia ultima domanda ho dimostrato confusione tra data.frame e data.table. Certo, non mi rendevo conto che c'era una distinzione.Qual è la differenza pratica tra data.frame e data.table in R

Quindi ho letto l'aiuto per ciascuno, ma in termini pratici, ogni giorno, qual è la differenza, quali sono le implicazioni e quali sono utilizzati per aiutarli a orientarsi al loro utilizzo appropriato?

+2

-1. La domanda è troppo ampia. –

+0

@AnandaMahto, grazie, ma è anche un'opportunità per un genio di trovare una risposta completa e di successo ... :-) –

+12

@Justin: I collegamenti sono stati utili. Non ero a conoscenza di loro. Forse potresti informare senza l'atteggiamento. @ Ferdinand.kraft: il tuo secondo commento riassume esattamente la mia posizione. Naturalmente posso leggere le pagine di aiuto e le esercitazioni, ma molti di loro presumono una conoscenza pratica della lingua e leggono come manuali tecnici per gli esperti. Sicuramente c'è qualcuno tra noi che può distillare le parti più pratiche da aver lavorato con 'data.frame' e' data.table' per anni. Non sto cercando di evitare il lavoro, ma cosa possono passare i programmatori esperti con meno esperienza? – remarkableearth

risposta

7

Sono simili. I frame di dati sono elenchi di vettori di uguale lunghezza mentre le tabelle di dati (data.table) sono un'eredità di frame di dati. Pertanto le tabelle di dati sono frame di dati ma i frame di dati non sono necessariamente tabelle di dati. Il pacchetto e la funzione delle tabelle di dati sono stati scritti per migliorare la velocità di indicizzazione, join ordinati, assegnazione, raggruppamento e colonne di elenchi (ecc.).

Vedere http://datatable.r-forge.r-project.org/datatable-intro.pdf per ulteriori informazioni.

+2

Sono simili solo nell'aspetto. –

+0

@Ellis, grazie per il link. – remarkableearth

+0

@ Ferdinand.kraft non sono _similar_ in funzione? ;) Ma sono d'accordo che hanno molte differenze –

47

Mentre questa è una domanda ampia, se qualcuno è nuovo su R questo può essere fonte di confusione e la distinzione può andare persa.

Tutti data.table s sono anche data.frame s. In poche parole, puoi considerare data.tables come data.frames con funzionalità extra.

data.frame fa parte della base R.

data.table è un pacchetto che estende data.frames. Due delle sue caratteristiche più importanti sono la sintassi veloce e pulita.

Tuttavia, lo zucchero di sintassi è diverso dalla sintassi standard di R per data.frame mentre è difficile da distinguere a occhio nudo dall'occhio non allenato. Pertanto, se si legge uno snippet di codice e non esiste un altro contesto per indicare che si sta lavorando con data.tables e si tenta di applicare il codice a un data.frame, potrebbe non riuscire o produrre risultati imprevisti. (Un chiaro omaggio che si sta lavorando con d.t di, oltre alla chiamata library/require è la presenza dell'operatore di assegnazione := che è unica per DT)

Con tutto ciò che viene detto, penso è difficile in realtà apprezzare la bellezza di data.table senza sperimentare le carenze di data.frame. (per esempio, vedi i primi 3 punti elenco della risposta di @ eddi). In altre parole, suggerisco vivamente di imparare come lavorare e manipolare data.frames prima di passare a data.table s.

26

Poche differenze nella mia vita quotidiana che vengono in mente (in nessun ordine particolare):

  • non dover specificare il nome data.table più e più volte (che porta alla sintassi goffi e stupidi errori) in espressioni (sul lato della medaglia a volte mi manca la scheda di completamento dei nomi)
  • molto più veloce e molto intuitivo by operazioni
  • non più freneticamente premendo Ctrl-C dopo aver digitato df, dimenticando quanto grande df era (che porta anche a quasi mai utilizzando head)
  • più veloce e migliore lettura del file con fread
  • il pacchetto fornisce anche una serie di altre funzioni di utilità, come %between% o rbindlist che rendono la vita migliore
  • più veloce tutto il resto, dal momento che un sacco di data.frame operazioni copiare il intera cosa inutilmente
+0

upvoted per la terza ragione ... – eflores89