[英]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
我们可以使用lapply
从split
输出中循环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.table
的Subset of Data.table
setDT(df)[order(eval(as.name("C/P")), K), .SD, by = Date]
如果我们按“日期”分组、基于列order
并对其余列执行一些操作,这可能很有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.