Mam dane (nazwijmy to mydata) z następującą ramką danych.Jak pracować z portfelem zamówień z funkcją R "by"?
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
Chcę obliczyć minAsk-maxBid, w tym przypadku = 1.6067-1.6066. Chcę to zrobić dla wszystkich moich danych. Myślałam używając „za”, ale nawet za pomocą tego prostego kodu:
by(mydata,mydata$datetime, min(mydata$price))
znaleźć tylko cenę minimalną w każdym bloku pojawia się następujący błąd: Błąd w Fun (X [[1L]] ...): nie można znaleźć funkcji "FUN"
Każdy pomysł, jak to zrobić? Czy powinienem użyć innej funkcji: ddply
?
Jeśli masz „odległość” tak naprawdę nie potrzebują Min/Max; możesz po prostu ustawić tylko opcję "distance == 1". W rzeczywistości, jeśli twoje dane są czyste, a spread nigdy nie jest przekroczony, możesz po prostu wziąć "abs" różnicy cen, gdzie odległość == 1 za każdym razem. – GSee
Otrzymasz najlepsze odpowiedzi, jeśli sprawisz, że twoje dane będą odtwarzalne. W takim przypadku, jeśli właśnie dostarczysz wynik "dput (mydata)" w swoim pytaniu, uzyskasz lepsze odpowiedzi. Zauważ, że to co pokazałeś ma osobne kolumny dla daty i czasu, ale naprawdę powinieneś użyć jednej kolumny datetime (prawdopodobnie POSIXct). – GSee
@ GSee- Moje dane były w kolumnach. Pójdę z rozwiązaniem w drugiej odpowiedzi, ponieważ ustawienie sub w dużych danych nie jest wydajne. Dzięki za uwagi na temat zamieszczania dodatkowych informacji, jestem tu nowy i zrobię to od niedawna. – mitra