Ho un dato (chiamiamolo mydata) con il seguente frame di dati.Come si lavora con l'ordine con la funzione R "per"?
datetime|side(0=Bid,1=Ask)| distance(1:best price, 2: 2nd best, etc.)| price
2008/01/28,09:11:28.000,0,1,1.6066
2008/01/28,09:11:28.000,0,2,1.6065
2008/01/28,09:11:28.000,0,3,1.6064
2008/01/28,09:11:28.000,0,4,1.6063
2008/01/28,09:11:28.000,0,5,1.6062
2008/01/28,09:11:28.000,1,1,1.6067
2008/01/28,09:11:28.000,1,2,1.6068
2008/01/28,09:11:28.000,1,3,1.6069
2008/01/28,09:11:28.000,1,4,1.6070
2008/01/28,09:11:28.000,1,5,1.6071
voglio calcolare minAsk-maxBid, in questo caso = 1,6067-1,6066. Voglio farlo per tutti i miei dati. Stavo pensando utilizzando "con", ma anche utilizzando questo semplice codice:
by(mydata,mydata$datetime, min(mydata$price))
per trovare solo il prezzo minimo in ogni blocco ottengo il seguente errore: Errore nel divertimento (X [[1L]], ...): impossibile trovare la funzione "FUN"
Qualche idea su come implementarlo? Devo usare una diversa funzione ddply
forse?
Se hai "distanza" non si ha realmente bisogno min/max; potresti semplicemente impostare sottoinsieme per includere solo 'distance == 1'. Infatti, se i tuoi dati sono puliti e lo spread non viene mai superato, puoi semplicemente prendere il valore "abs" della differenza tra i prezzi dove la distanza == 1 per ogni volta. – GSee
Otterrete le risposte migliori se rendete i vostri dati riproducibili. In questo caso, se hai appena fornito l'output di 'dput (mydata)' nella tua domanda, otterresti risposte migliori. Nota che ciò che hai mostrato ha colonne separate per Data e ora, ma dovresti davvero usare una singola colonna datetime (probabilmente POSIXct). – GSee
@ GSee- Ho avuto i miei dati in colonne. Vado con la soluzione nella seconda risposta poiché l'impostazione secondaria in un enorme dato non è efficiente. Grazie per i punti sulla pubblicazione di maggiori informazioni, sono nuovo qui e lo farò da quella volta. – mitra