我有一个数据框,其中包含每个日期的选项信息。每个日期都有多行,对应于执行价格的变化范围:
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
答案 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
根据列进行分组并对其余列进行一些操作,这可能很有用。