避免和计算计算Mathematica中基本统计数据的非数值

500*_*500 3 statistics numerical design-patterns wolfram-mathematica

请考虑:

dalist={{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, 
       {2.88`, 2.04`, 4.64`,0.56`, 4.92`, 2.06`, 3.46`, 2.68`, 2.72`,0.820},   
       {"Laura1", "Laura1", "Laura1", "Laura1", "Laura1", 
       "Laura1", "Laura1", "Laura1", "Laura1","Laura1"}, 
       {"RIGHT", 0, 1, 15.1`, 0.36`, 505, 20.059375`,15.178125`, ".", "."}}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

实际数据集大约是6 000行和147列.但是上面反映了它的内容.我想计算一些基本的统计数据,比如均值.我的尝试:

Table[Mean@dalist[[colNO]], {colNO, 1, 4}]
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我怎么能创建一个功能,如:

  • 避免使用非数值和

  • 计算每个列表中找到的非数值的数量.

我还没有成功找到正确的模式机制.

Ver*_*eia 6

第一个观察:你可以使用,Mean /@ dalist如果你想平均跨行.你Table这里不需要一个功能.

尝试使用Cases(文档),例如.Mean /@ (Cases[#,_?NumericQ] & /@ dalist)

如果您想要变得棘手并消除数据中没有数字元素的行(例如您的第三列),请尝试以下操作.它首先只选择具有一些数字元素的行,然后仅从这些行中获取数字元素.

Mean /@ (Cases[#,_?NumericQ] & /@ (Cases[dalist, {___,_?NumericQ,___}]))
Run Code Online (Sandbox Code Playgroud)

要计算非数字元素,您将使用类似的方法:

Length /@ (Cases[#,Except[_?NumericQ]] & /@ dalist)
Run Code Online (Sandbox Code Playgroud)

这个答案有一点需要注意,我在没有Mathematica安装的情况下输入它来实际检查我的语法.一些拼写错误可能会重演.

  • 你可以使用`Select [#,NumericQ]&`而不是`Cases`.对于`Select`来说,测试的使用是很自然的,其中`Case`使用的模式在这种情况下必须使用`PatternTest(?)转换为测试. (3认同)
  • 或者,要计算非数字项,`Count [#,除了[_?NumericQ]]&/ @ dalist` (2认同)