1

我正在考虑使用 deedle 将数百个系列加入一个框架。实现这一目标的最佳功能方式是什么?

直接(必要)的想法是在循环之外创建一个框架对象持有者。然后在循环中,这个对象 old 用作系列连接的左侧。

再想一想,C#尾递归?我做了一些研究,我对 c# 是否可以进行尾递归有点迷茫。#Tomas 的《真实世界的函数式编程》一书中只有 F个例子

还有人有数百列(1000行)的deedle框架吗?对性能有很大影响吗?这听起来可能有些过分,但通常在电子表格中完成

欢迎任何建议。谢谢卡比

4

1 回答 1

3

创建框架的正确方法取决于数据的来源。

如果您已经拥有所有系列并且想要创建一个包含它们作为列的框架,那么该方法Frame.FromColumns可能是要走的路。该方法采用键值对的集合,其中键是列名,值是列(系列)。

这是一个最小的示例,它创建了一个包含名称和系列的键值对数组:

var cols = new KeyValuePair<string, Series<int, object>>[]{
  KeyValue.Create("IDs", (new object[] {1,2,2}).ToOrdinalSeries() ),
  KeyValue.Create("Namess", (new object[] {"A", "B", "C"}).ToOrdinalSeries() )
};
var frame = Frame.FromColumns(cols);

我假设在您的情况下,您已经在某个集合中拥有该系列,因此功能性方法是使用 LINQ 并将Select您的数据投影为正确的格式。所以你的代码可能看起来像:

var cols = someSource.Select(item =>
  KeyValue.Create(item.Key, item.Series));
var frame = Frame.FromColumns(cols);

FromColumns操作在掩护下使用了外连接,但它已经过优化(例如,如果您有具有相同索引的系列)。Deedle的 C# 文档中有许多其他示例。

于 2014-07-17T21:54:11.353 回答