繁体   English   中英

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

[英]R: Split Data Frame, then perform for:each functions (sorting) on each split

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

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 是要使用的包吗? 我试过 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

我们可以使用lapplysplit输出中循环list元素,然后使用“C/P”和“K”列值对行进行order

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) ),按 'Date' 分组,我们对 'i' 中的“C/P”和“K”列进行order ,然后获取Subset of Data.tableSubset of Data.table

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM