R:拆分数据帧,然后对每个拆分执行for:每个函数(排序)

R:拆分数据帧,然后对每个拆分执行for:每个函数(排序),r,sorting,date,plyr,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

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

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作为次要排序键

plyr是要使用的包装吗?我尝试过拆分(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

我们可以使用
lappy
split
输出循环
列表
元素,然后
order
使用“C/p”和“K”列值的行

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

或者,可以执行任何group by操作,而不是使用
split
方法。使用
data.table
,我们将'data.frame'转换为'data.table'(
setDT(df)
),按'Date'分组,我们对'i'中的'C/P'和'K'列进行排序,并得到数据的子集。table

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

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

您可以使用
lappy(拆分(df,df$Date),函数(x)x[顺序(x[[“C/p”]],x[[“K”]],])
如果显示预期的输出,它会提供更多信息。顺便说一句,您不需要拆分数据集。使用
数据可以更容易地做到这一点。table/dplyr
setDT(df)[order(“C/P”,K),.SD,by=Date]
列名有点问题。类似于
df[order(df$Date,df$'C/P'),]
?请使用从所示示例中获得的预期输出。