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'),]
?请使用从所示示例中获得的预期输出。