R:拆分数据框,然后执行:每个拆​​分的每个功能(排序)

时间:2016-03-22 05:34:04

标签: r sorting date plyr

我有一个数据框,其中包含每个日期的选项信息。每个日期都有多行,对应于执行价格的变化范围:

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

我有216个日期,每个日期有100-300行,每个执行价格一个。我想按日期拆分数据框,对于每个日期框架,使用C / P作为主要排序键,K作为辅助排序键。

是否使用包裹?我尝试过split(df,df $ Date)但我找不到任何关于将排序函数应用于每个拆分数据框的文档。

通过主要和次要排序,我的意思是:

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 个答案:

答案 0 :(得分:1)

我们可以使用lapply循环list输出中的split元素,然后order遍历“C / P”和“K”列值的行

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

或者代替split方法,可以完成任何group by操作。使用data.table,我们将'data.frame'转换为'data.table'(setDT(df)),按'日期'分组,我们order将“C / P”和“K” “'i'中的列并获得Subset of Data.table

setDT(df)[order(eval(as.name("C/P")), K), .SD, by = Date]

如果我们按“日期”分组,order根据列进行分组并对其余列进行一些操作,这可能很有用。