分组洗牌在大班课上,学生必须给同龄的另一位学生写信(学生 A 写信给学生 A 是可以的)。
我可以使用哪个列公式来添加名称_2 ?
即使有数百万行,该公式也应该运行得很快。
自动化和脚本编写回复:分组洗牌变通方法:虚拟表 - 洗牌 - 连接
Names Default to Here(1);
dt1 = Open( "$SAMPLE_DATA/Big Class Families.jmp" );
New Column( "Rank1", Formula( Col Rank( 1, :age ) ));
New Column( "Rank2", Formula( Col Rank( random integer (100000), :age ) ));
New Column( "name 2", Character, "Nominal", Formula( :name ));
New Column( "age 2", Formula( :age ));
dt2 = dt1 << Subset( All rows, Selected columns only( 0 ) );
dt1 << Join(
With( dt2 ),
Match Flag( 0 ),
Suppress main table formula evaluation( 0 ),
Select( :name, :age ),
SelectWith( :name 2, :age 2 ),
By Matching Columns( :age = :age, :Rank1 = :Rank2 ),
Drop multiples( 0, 0 ),
Include Nonmatches( 1, 1 )
);

回复:分组洗牌无效的变通方法:自连接
为什么?
Names Default to Here(1);
dt1 = Open( "$SAMPLE_DATA/Big Class Families.jmp" );
New Column( "Rank1", Formula( Col Rank( 1, :age ) ));
New Column( "Rank2", Formula( Col Rank( random integer (100000), :age ) ));
New Column( "name 2", Character, "Nominal", set each value( :name ));
New Column( "age 2", set each value ( :age ));
//dt2 = dt1 << Subset( All rows, Selected columns only( 0 ) );
dt1 << Join(
With( dt1 ),
Select( :name, :age ),
SelectWith( :name 2, :age 2 ),
By Matching Columns( :age = :age 2, :Rank1 = :Rank2 ),
Drop multiples( 0, 0 ),
Include Nonmatches( 1, 1 )
);

回复:分组洗牌合并列 At() 和列 Shuffle()
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
new_col = dt << New Column("Shuffle",
Character,
Nominal,
Formula(Col At(:name, Col Shuffle(:age), :age))
);
我没有验证结果,也没有测试速度。
回复:分组洗牌我被列随机排列()函数卡住了:
如何将分组索引转换为行索引?
啊,当然,使用分组索引作为col at(idx, byGroup) 的输入——完美匹配!
这是新功能的绝佳示例。