如何使用 Wolfram Mathematica 修改列中的数据?
How to modify the data in a column using Wolfram Mathematica?
我正在处理一个名为 Property
的具有一列的 Dataset
对象。
数据给出如下图:
根据范围,我想分配一个新值,并最终替换整个有问题的列。例如,如果范围是 500-5000,我想得到值 1,对于 5000-50000,我想给出值 2,依此类推。
如果我们有网格 stuff
和列整数 x
(从 1 开始,因为我们在 mathematica 中)名为 "Property",用于获取 "Property" 中转换范围列的代码=15=] -- 我想你想要的 -- 下面是:
Replace[#1[[1]] & /@ stuff, x_ :> IntegerLength[x[[1, 1]]] - 2, {1}]
它采用指定列中的所有范围,并从范围下部的长度中减去 2 得到结果。
例如,如果我们采用您的样本范围:
stuff = {{$Interval[{500, 50000}], things, things},
{$Interval[{5000, 5000000}], things, things}}
和运行它通过我们Replace
:
Replace[#1[[1]] & /@ stuff, x_ :> IntegerLength[x[[1, 1]]] - 2, {1}]
我们得到 Out:
的:
{1, 2}
然后您可以轻松修改上面的 Replace
以在原位为您提供 stuff
.
的转换列
据我了解,您想通过修改数据集来重新编码数据集的一列。据我所知,数据集并不是真正设计为可变类型。如果您能接受,这里有两种方法可以继续。
首先,我们来获取一些人工数据。
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
我正在处理一个名为 Property
的具有一列的 Dataset
对象。
数据给出如下图:
根据范围,我想分配一个新值,并最终替换整个有问题的列。例如,如果范围是 500-5000,我想得到值 1,对于 5000-50000,我想给出值 2,依此类推。
如果我们有网格 stuff
和列整数 x
(从 1 开始,因为我们在 mathematica 中)名为 "Property",用于获取 "Property" 中转换范围列的代码=15=] -- 我想你想要的 -- 下面是:
Replace[#1[[1]] & /@ stuff, x_ :> IntegerLength[x[[1, 1]]] - 2, {1}]
它采用指定列中的所有范围,并从范围下部的长度中减去 2 得到结果。
例如,如果我们采用您的样本范围:
stuff = {{$Interval[{500, 50000}], things, things},
{$Interval[{5000, 5000000}], things, things}}
和运行它通过我们Replace
:
Replace[#1[[1]] & /@ stuff, x_ :> IntegerLength[x[[1, 1]]] - 2, {1}]
我们得到 Out:
的:
{1, 2}
然后您可以轻松修改上面的 Replace
以在原位为您提供 stuff
.
据我了解,您想通过修改数据集来重新编码数据集的一列。据我所知,数据集并不是真正设计为可变类型。如果您能接受,这里有两种方法可以继续。
首先,我们来获取一些人工数据。
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