Wolfram mathematica 在Mathematica中使用Tally命令返回的数据

Wolfram mathematica 在Mathematica中使用Tally命令返回的数据,wolfram-mathematica,Wolfram Mathematica,我有一小段代码来生成序列,这很好 List = Reap[ For[i = 1, i <= 10000, i++, Sow[RandomSample[Join[Table["a", {2}], Table["b", {2}]], 2]]];][[2, 1]]; Tally[List] 我的问题是我还没有找到从输出中提取频率的方法 提前感谢您提供的帮助注意:通常不要以大写字母开头用户创建的符号名称,因为它们可能与内部函数冲突 我不清楚您希望如何转换输出。一种解释是,

我有一小段代码来生成序列,这很好

List = Reap[
    For[i = 1, i <= 10000, i++, 
      Sow[RandomSample[Join[Table["a", {2}], Table["b", {2}]],  2]]];][[2, 1]];
Tally[List]
我的问题是我还没有找到从输出中提取频率的方法


提前感谢您提供的帮助注意:通常不要以大写字母开头用户创建的符号名称,因为它们可能与内部函数冲突

我不清楚您希望如何转换输出。一种解释是,你只想:

{166302, 333668, 332964, 167066}
在你的代码中你使用了
[[2,1]]
,所以我想你知道如何使用
部分,这是其中的一个简短形式。
零件的文档包括:

如果列表i中的任何一个是
All
,保留该级别的所有零件

因此,您可以使用:

Tally[list][[All, 2]]
您还可以使用:

Last /@ Tally[list]

作为注释,您可以使用
排序
,由于
理货
数据的结构,它将首先按项目排序,因为它出现在每个列表的第一位,并且每个列表具有相同的长度

tally = 
 {{{"b","b"},166302},{{"b","a"},333668},{{"a","b"},332964},{{"a","a"},167066}};

Sort[tally][[All, 2]]
您还可以将数据转换为
规则
对象列表,然后从预定列表中提取值:

rules = Rule @@@ tally
这些可以是您选择的任何顺序:

{{"a", "a"}, {"a", "b"}, {"b", "a"}, {"b", "b"}} /. rules
仅为了说明另一种技术,如果您有一个特定的项目列表,您可能会在这个
Sow
eaw
结构中找到价值。例如,使用随机列表“a”、“b”、“c”、“d”

计算
“a”
“c”
元素:

Reap[Sow[1, dat], {"a", "c"}, Tr[#2] &][[2, All, 1]]

这不如计数快,但比对每个元素进行计数快,有时语法也很有用。

你是什么意思?当然,输出显示了每对出现的次数,可能是您的“频率”。您想对这些数据做什么?是的,输出显示了每对的频率,但我需要获取每对(a、b)等的总数,并在绘图/图表等中使用它们,此时我必须手动输入“166302”等等,当我需要绘制一个缓慢而乏味的图时……我添加了一个答案。这是你想要的还是别的什么?行的通,我可以用图中的数据谢谢!可以按特定顺序排列命令返回的四个数字列表吗?例如{AA的数量,BB的数量,AB的数量,BA的数量}。我之所以问这个问题,是因为每次运行代码时,它都会更改输出的顺序。。Sort@Tally我会给你一个一致的订单。谢谢Wizard先生和George的帮助,我非常感谢。我现在可以生成图形,而无需手动输入值,并且标签在图形上匹配..再次感谢这将节省我很多时间。。
{{"b", "b"} -> 166302, {"b", "a"} -> 333668, {"a", "b"} -> 332964, {"a", "a"} -> 167066}
{{"a", "a"}, {"a", "b"}, {"b", "a"}, {"b", "b"}} /. rules
{167066, 332964, 333668, 166302}
SeedRandom[1];
dat = RandomChoice[{"a", "b", "c", "d"}, 50];
Reap[Sow[1, dat], {"a", "c"}, Tr[#2] &][[2, All, 1]]
{19, 5}