根据文档,Matlab unstack
可以使用此表:
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
Run Code Online (Sandbox Code Playgroud)
...并将其转换为:
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
Run Code Online (Sandbox Code Playgroud)
假设新列按字母顺序生成似乎是合理的.假设如果一个人手动操作数据,这将是正常的,但如果不能100%确定列的排序,则是自动数据处理的交易破坏者.例如,如果Town
列实际上是一个数字索引,那么新的列名称将自动生成,以便成为合法的变量名称,并且排序将是将新列链接回Town
字段中的值的关键信息..如果提取U {:,2:end}进行操作,那么数据可能都是错误的,除非人们可以100%确定订购新列的方案.
实际上我创建了一个新列来代替Town
包含有效字符串,后缀为数字索引值.这些成为新的列标题.但实际情况是,必须编写额外的代码以确保列以正确的顺序出现是太麻烦了.它取消了unstack的好处,我最终只是创建循环来逐个构建新列.在时间和代码方面效率不高或不优雅.我正试图找到一种可靠地利用未来堆栈的方法.
我已经提交了反馈,描述了这些信息的重要性,但我不希望很快回复.同时,拆散是一个非常有用的功能,我想知道是否有人可以权衡假设新列的字母顺序的可取性?
是的,根据我在代码源中的理解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.
Run Code Online (Sandbox Code Playgroud)
排序标识后,自带的有效性与功能检查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
.
归档时间: |
|
查看次数: |
125 次 |
最近记录: |