代码之家  ›  专栏  ›  技术社区  ›  HEART94

如何使用Wolfram Mathematica修改列中的数据?

  •  1
  • HEART94  · 技术社区  · 8 年前

    我正在做一个 Dataset 具有一列的对象,命名为 Property

    数据如下图所示:

    a column of this kind of data

    2 回复  |  直到 8 年前
        1
  •  1
  •   Alan    8 年前

    ds = Dataset[<|"x" -> RandomInteger[10], 
         "y" -> Interval[{10^#, 10^(# + 1)}]|> & /@ Range[5]]
    

    现在假设我们想用一个函数重新编码第二列 f :

    ds[All, {2 -> f}]
    

    下面是一个要尝试的示例函数。

    f[x_Interval] := Log[10, x[[1, 1]]]
    ds[All, {2 -> f}]
    

    现在一个大问题是,您的新数据集有一个名称完全相同但解释完全不同的列。如果这让您感到困扰,您可以改为使用新名称附加到数据集。

    Append[#, "y2" -> f[#y]] & /@ ds
    

    编辑:

    那些美元符号呢?除非你给我们看完整的条目,否则我只能猜测了。因此,我猜想以下人工数据使我们离得足够近,非常有用:

    ds = Dataset[<|"x" -> RandomInteger[10], 
     "y" -> Quantity[Interval[{10^#, 10^(# + 1)}], "USDollars"]|> & /@ Range[5]]
    

    f

    f[Quantity[Interval[{x_, _}], _]] := Log[10, x]
    

    然后我们可以像以前一样替换或附加:

    ds[All, {2 -> f}]
    Append[#, "y2" -> f[#y]] & /@ ds
    
        2
  •  0
  •   llvmastproject    8 年前

    stuff 带列整数 x (从1开始,因为我们在mathematica中)名为“Property”,用于获取转换范围列的代码 --下面是我想要你做的:

    Replace[#1[[1]] & /@ stuff, x_ :> IntegerLength[x[[1, 1]]] - 2, {1}]
    

    它取指定列中的所有范围,并从范围较低部分的长度中减去2,得出结果。

    例如,如果我们选取您的样本范围:

    stuff = {{$Interval[{500, 50000}], things, things},
      {$Interval[{5000, 5000000}], things, things}}
    

    Replace :

    我们得到一个 Out: 其中:

    {1, 2}
    

    然后,您可以轻松修改 上面给出了转换柱的原位 东西

    推荐文章