如何使用F#和#x27连接框架;s Deedle其中一个帧具有复合关键点?
假设我有两个帧,第一帧(如何使用F#和#x27连接框架;s Deedle其中一个帧具有复合关键点?,f#,deedle,F#,Deedle,假设我有两个帧,第一帧(Frame)和第二帧(Frame)。我想找到一种连接帧的方法,以便来自firstFrame的合成关键点的第一部分的值与来自secondFrame的关键点的值匹配 以下是我正在使用的框架示例: val firstFrame : Deedle.Frame<(int * int),string> = Premia 1 1 -> 125 2 1 -> 135 3 1 -> 169 1 2 -> 231
Frame
)和第二帧(Frame
)。我想找到一种连接帧的方法,以便来自firstFrame的合成关键点的第一部分的值与来自secondFrame的关键点的值匹配
以下是我正在使用的框架示例:
val firstFrame : Deedle.Frame<(int * int),string> =
Premia
1 1 -> 125
2 1 -> 135
3 1 -> 169
1 2 -> 231
2 2 -> 876
3 2 -> 24
val secondFrame : Deedle.Frame<int,string> =
year month
1 -> 2014 Apr
2 -> 2014 May
3 -> 2014 Jun
好问题!这并不像应该的那么容易(这可能与我们讨论的关于连接框架的另一个问题有关)。我认为应该有一个更好的方法来做这件事,我会在这个问题上添加一个链接 也就是说,可以使用这样一个事实,即连接可以对齐不完全匹配的关键点。可以首先将零添加为第二帧中关键点的第二个元素:
> let m = secondFrame |> Frame.mapRowKeys (fun k -> k, 0);;
val m : Frame<(int * int),string> =
year month
1 0 -> 2014 Apr
2 0 -> 2014 May
3 0 -> 2014 Jun
这并不特别明显,但它确实起到了作用。不过,我希望我们能想出一个更好的办法 谢谢。是的,这个链接与我试图最终实现的目标有关——我只是为了方便而使用了索引。我找不到“SortByRowKey”,所以使用了“Frame.orderRows firstFrame”,这就完成了任务。如果有计划开发更好的东西,那么R包dplyr可能值得考虑。
> let m = secondFrame |> Frame.mapRowKeys (fun k -> k, 0);;
val m : Frame<(int * int),string> =
year month
1 0 -> 2014 Apr
2 0 -> 2014 May
3 0 -> 2014 Jun
> firstFrame.SortByRowKey().Join(m, JoinKind.Left, Lookup.NearestSmaller);;
val it : Frame<(int * int),string> =
Premia year month
1 1 -> 125 2014 Apr
2 -> 231 2014 Apr
2 1 -> 135 2014 May
2 -> 876 2014 May
3 1 -> 169 2014 Jun
2 -> 24 2014 Jun