matlab - Matlab`unstack`:可以安全地假设新列的排序?
问题描述
根据文档,Matlabunstack
可以使用此表:
S=12×3 table
Storm Town Snowfall
_____ ____ ________
3 'T1' 0
3 'T3' 3
1 'T1' 5
3 'T2' 5
1 'T2' 9
1 'T3' 10
4 'T2' 12
2 'T1' 13
4 'T3' 15
2 'T3' 16
4 'T1' 17
2 'T2' 21
...并将其转换为:
U = unstack(S,'Snowfall','Town')
U=4×4 table
Storm T1 T2 T3
_____ __ __ __
3 0 5 3
1 5 9 10
4 17 12 15
2 13 21 16
假设新列按字母顺序生成似乎是合理的。如果一个人手动操作数据,假设这会很好,但是如果一个人不能 100% 地保证列的顺序,那么它就会破坏自动数据处理的交易。例如,如果该Town
列实际上是一个数字索引,那么新的列名将被自动生成,以便成为合法的变量名,并且排序将是将新列链接回Town
字段中的值的关键信息. 如果提取 U{:,2:end} 进行操作,则数据可能都是错误的,除非可以 100% 确定排序新列的方案是什么。
我实际上创建了一个新列来代替Town
包含一个有效字符串,并以数字索引值为后缀。这些成为新的列标题。但现实情况是,必须编写额外的代码来确保列以正确的顺序出现太麻烦了。它抵消了 unstack 的好处,我最终只是创建循环来一一构建新列。在时间和代码方面效率不高或不优雅。我正在尝试找到一种方法来可靠地利用 unstack 在未来。
我已经提交了反馈,描述了这一信息的重要性,但我预计不会很快回复。同时,unstacking 是一个非常有用的功能,我想知道是否有人可以权衡假设新列的字母顺序是否可取?
解决方案
是的,根据我在代码源中的理解unstack.m
(您可以通过键入来阅读edit unstack
),在检查标识符是否为有效。
Unicode 顺序将特别意味着:
- 那
T10
将是之前T9
。 t10
将在之后T10
。
根据unstack
,将标识符转换为唯一索引的函数subs2inds
依赖于一个tabularDimension
被称为(在 R2018b 中)时间的类:
%tabularDimension Internal abstract class to represent a tabular's dimension.
% This class is for internal use only and will change in a
% future release. Do not use this class.
对标识符进行排序后,使用函数matlab.lang.makeValidName
(使用默认选项'Prefix','x'
)进行有效性检查,如果标识符无效(默认用下划线替换非法字符),该函数将修改标识符。
有效的 MATLAB 标识符是由字母数字(A-Z、a-z、0-9)和下划线组成的字符向量,这样第一个字符是字母并且字符向量的长度小于或等于
namelengthmax
。
makeValidName
在替换任何不是字母数字或下划线的字符之前删除所有空白字符。如果空白字符后跟一个小写字母,makeValidName
则将该字母转换为相应的大写字符。
例如:
2A
将更改为x2A
.ça
将更改为x_A
.
特殊情况将在matlab.lang.makeuniquestrings
函数的帮助下处理。
例如,如果您询问标识符:ç1
, à1
,Matlab 仍然能够区分它们并分别重命名它们x_1_1
, x_1
.
在您的情况下,我建议自动生成具有恒定起始字母的列,然后生成具有前导零的索引,从而产生恒定数量的字符:T0001
, T0002
, ..., T0100
, ..., T9999
。
推荐阅读
- node.js - 如何在 AWS Lambda 中使用 Nodejs“请求”工作?
- jpa - EclipseLink 延迟属性抛出 ConcurrencyException
- scala - Scala Spark collect_list() 与 array()
- javascript - Dash 中的多页应用程序 - 其他页面中无法识别的下拉值
- javascript - 如何有效地查询索引处的元素
- python - 这个 beautifulsoup 脚本可以用正则表达式简化吗?
- python-3.x - libcloud的get_driver函数中的提供者名称可以作为python输入提供者发送吗?
- python - 如何从父类访问子类方法?
- spring-boot - 从配置服务器获取资源时如何运行spring boot应用程序多个实例?
- firebase - 离子刷新器在页面加载时自动触发?