如何根据列中的组创建数字你好,
我有一个随机重复相同字符串顺序的分类列。 我想为每个具有相同字符串的组添加数字标签,如图中的示例。 我该如何创建结果列?

自动化和脚本编写回复:如何根据列中的组创建数字怎么样使用“重新编码新列”;

脚本:
// New data table
// → Data Table( "Untitled" )
New Table( "Untitled" );
// Recode column: result
Local( {dt, col1},
dt = Data Table( "Untitled" );
dt << Begin Data Update;
col1 = dt << New Column( dt:Column 1 );
col1 << Set Name( "result" );
dt << Move Selected Columns( {col1}, after( dt:Column 1 ) );
dt << Recode Column(
dt:Column 1,
{Map Value(
_rcOrig,
{"aaa", "1", "bb", "2", "ccc", "3", "ddd", "4", "eee", "5"},
Unmatched( _rcNow )
)},
Update Properties( 1 ),
Target Column( col1 )
);
dt << End Data Update;
);回复:如何根据列中的组创建数字我每天都会收集新数据,并且会有很多新字符串。 需要一种比使用重新编码新列进行硬编码更好的方法
回复:如何根据列中的组创建数字根据您想要的专栏类型以及您愿意编写多少脚本,有很多选择。 以下是一种可能有效的选项
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(9),
Compress File When Saved(1),
New Column("Column 1",
Character,
"Nominal",
Set Values({"aa", "bb", "cc", "aa", "bb", "cc", "aa", "bb", "cc"})
)
);
dt << New Column("col", Numeric, Ordinal, << Set Each Value(
vals = As Constant(Associative Array(:Column 1 << get values) << get keys);
Contains(vals, :Column 1)
));回复:如何根据列中的组创建数字你好,
这是一个丑陋的方法,它将为您的 ID 列表分配一个数字 ID
Col Rank( :Column1, <<TIE></TIE>
问题是这些唯一 ID 不会以 1 为增量创建。
我仍在研究更好的方法,但这可能会开始。
最好的。
TS
回复:如何根据列中的组创建数字你好,我们又见面了,
我明白了(见下文):
aa = Associative Array( :GROUP );
kk = Associative Array( :GROUP ) << Get Keys;
For( i = 1, i <= N Items( kk ), i++,
aa[kk[i]] = i
);
aa[:GROUP];
我希望它适用于您的应用程序。
最好的,
TS
回复:如何根据列中的组创建数字这是完成它的另一种方法。
这种方式创建一个表摘要并为每个唯一值提供一个数字。默认情况下,这是按升序排列的,但也可以按降序排列或您希望的任何其他顺序。
当前的编号公式还可以根据需要针对不同的单位或增量变得更加复杂。
所有步骤也可以通过单击菜单中的按钮来完成
让我们知道它是否有效。
// create data table to work with
dt1 = New Table( "Untitled", Add Rows( 11 ),
New Column( "Column 1", Character, "Nominal",
Set Values({"aaa", "bb", "ccc", "aaa", "ddd", "eee", "ccc", "bb", "bb", "ccc", "aaa"})
)
);
// start working
// Data table summary
dt2 = dt1 << Summary( Group( :Column 1 ), Freq( "None" ), Weight( "None" ), Link to original data table( 0 ));
// Delete column: N Rows
dt2 << Delete Columns( :N Rows );
// New column: result
dt2 << New Column( "result", Numeric, "Continuous", Format( "Best", 12 ),Formula( Row() ));
// Delete column formula: result
dt2:result << Delete Formula;
// Update data tables
dt1 << Update(
With( Data Table( dt2 ) ),
Match Columns( :Column 1 = :Column 1 ),
Replace Columns in Main Table( None )
);
// Close Data Table: Untitled By (Column 1)
Close( dt2, no save );