2016-03-22 15 views
0

Her tarih için seçenekler bilgisi içeren bir veri çerçevem ​​var. Her tarih grev fiyatlarının değişen aralığına tekabül birden fazla satır var ben 216 tarihleri ​​varR: Veri Çerçevesini Bölün, sonra yapın: her bir bölme üzerindeki her işlev (sıralama)

head(df) 
     Date C/P K  Vol  Delta  ID 
1 01/23/1997 0 805 0.155814 0.234181 10007288 
2 01/23/1997 1 790 0.159603 -0.609276 10333499 
3 01/23/1997 0 815 0.141776 0.132414 10106825 
4 01/23/1997 1 700 0.257233 -0.060976 10012499 
5 01/23/1997 1 680 0.279465 -0.035616 10072595 
6 01/23/1997 0 730 0.197782 0.888286 10307920 

ve her tarih 100-300 satırları, her grev fiyata birine sahiptir. Veri çerçevesini tarihe göre bölmek istiyorum ve her bir tarih çerçevesi için, C/P birincil sıralama anahtarı ve K ikincil sıralama anahtarı olarak kullanın.

Plyr paketi kullanılacak mı? Bölünmüş (df, df $ Date) denedim ancak her bir bölünmüş veri çerçevesine bir sıralama işlevi uygulama konusunda herhangi bir belge bulamıyorum. birinci ve ikinci tür ile

, yani:

Input: 
C/P K Vol Delta 
0 800 0.1 0.11 
1 800 0.2 0.22 
1 700 0.3 0.33 
0 700 0.4 0.44 
1 900 0.5 0.55 
1 600 0.6 0.66 
0 600 0.7 0.77 
0 900 0.8 0.88 

Output: 
C/P K Vol Delta 
0 600 0.7 0.77 
0 700 0.4 0.44 
0 800 0.1 0.11 
0 900 0.8 0.88 
1 600 0.6 0.66 
1 700 0.3 0.33 
1 800 0.2 0.22 
1 900 0.5 0.55 
+1

'lapply (split (df, df $ Date) işlevini kullanabilirsiniz (x) x [order (x [[" C/P "]], x [[" K "]]),])' Beklenen çıktıyı gösterirseniz daha bilgilendirici olurdu. BTW, veri kümesini “bölmek” zorunda değilsiniz. Bu daha kolay yapılabilir "data.table/dplyr" ie'setDT (df) [order ("C/P", K), .SD, by = Tarih] '' C/P' sütun adı biraz sorunlu. – akrun

+1

df [order (df $ Date, df $ 'C/P'),] 'gibi bir şey var mı? – JeremyS

+0

Lütfen gösterilen örnekte alacağınız tahmini çıkışı kullanın. – akrun

cevap

0

Biz split çıkışından list elemanları üzerinde döngü lapply kullanmak ve daha sonra order "C/P" ve "k" sütununda, satırlar olabilir

lapply(split(df, df$Date), function(x) 
      x[order(x[["C/P"]], x[["K"]]),]) 

Veya bunun yerine split yöntemin

, operasyonlarla grubunun herhangi yapılabilir değer verir. data.table ile, 'Tarihe', biz "C/P" order ve 'i' in "K" sütunları ve Subset of Data.table

olsun göre gruplandırılmış ( setDT(df)) 'data.table' için 'data.frame' dönüştürmek
setDT(df)[order(eval(as.name("C/P")), K), .SD, by = Date] 

Bu, "Tarih", order sütunlarına dayanarak ve sütunların geri kalanında bazı işlemler yaparak gruplandırıyorsak yararlı olabilir.

İlgili konular