拆分数据表问题<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />我在分割数据表时遇到问题,想知道是否有人知道如何处理。 我的数据如下所示:

数据应分割为识别号2和ID是组变量。 当我这样做时,我最终会得到这样的结果:

问题是对于ID s 2 和 4 列中有多个 C 值识别号2 。 JMP 似乎始终使用拆分数据表中的最后一个值。
是否有任何自动方法可以做到这一点,以便我最终得到如下所示的表格?

这里有两行 ID 2 和 4,代表原始数据中 C 的不同值。
感谢您的帮助!
塞巴斯蒂安
回复:拆分数据表问题谢谢姆夏普,
效果很好。
当你在写的时候,保持简单可能是最好的方法。
回复:拆分数据表问题一般来说,我会远离这种方法,静态数据通常比动态数据更安全。 你必须问自己数据的顺序有多重要?此解决方案将使键保持有序,但值可以自由漫游。但...
该解决方案仅适用于数字列。如果我们将 :ID2 替换为 :ID2Num,其中 A's = 1,B's =2 等。您可以简单地使用 & 语句,因此公式为 :Sum( :ID[Index( 1, Row() )] == :ID & :ID2Num[Index( 1, Row() )] == :ID2Num ) 。
如果你有角色专栏,你就必须更有创意。因此对于公式:
长度(concat items(:ID2[Index( 1, Row() )],"")) - length(substitute(concat items(:ID2[Index( 1, Row() ))],""), :ID2, “”))
或者
dt1 << 新列("Concat", 字符, 名义值, 公式(:ID2 || char(:ID)));
dt1 << 新列("重复", 字符, 名义值, 公式((长度(concat items(:Concat[Index( 1, Row() )],"")) - length(substitute(concat items(:Concat[ Index( 1, Row() )],""), :Concat,"")))/2)); //最后的2占连接字符串的长度
这里发生了很多事情,我现在没有精力解释。但如果您有疑问,请告诉我;实际上,上面有一个更可行、更简单的解决方案。
回复:拆分数据表问题谢谢姆夏普,
顺便说一下,在上一篇文章中 @ms 提供了这个索引公式:Sum( :ID[Index( 1, Row() )] == :ID ) @多发性硬化症提供了这个索引公式:Sum( :ID[Index( 1, Row() )] == :ID )
回复:语法:如何通过 ID 创建索引列
有没有办法在这种情况下使用它?有两个索引列,其中之一是按字母顺序排列的?
最好的,
罗恩
回复:拆分数据表问题只是结合/总结所提到的内容。 确保事先对数据进行排序,否则 Lag() 函数将会出现问题。此外,使用公式比使用 for every row() 命令更快。如果您担心后排序可能会影响稍后的 lag() 函数,只需删除公式即可避免冲突。因此:
名称默认到这里( 1 ) ;
// 桌子
dt1 =新表( “塞巴斯蒂安” ,
新专栏( “ID” ,
数字,
“名义” ,
格式( “最好的” , 12 ) ,
设定值( [ 1 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 3 , 3 , 3 , 3 , 4 , 4 , 4 , 4 , 2 , 2 ] )
) ,
新专栏( “ID2” ,
特点,
“名义” ,
设定值(
{ “A” , “乙” , “C” , “D” , “A” , “B” , “C” , “C” , “A” , “乙” , “C” , “D” , “A” , “乙” ,
“C” , “C” , “C” , “B” }
)
) ,
新专栏( “价值” ,
数字,
“名义” ,
格式( “最好的” , 12 ) ,
设定值(
[ 111 , 222 ,第333章,第444章, 111 , 222 ,第333章,第555章, 111 , 222 ,第555章,第444章, 111 , 222 ,
第555章,第666章,第777章,第888章]
)
)
) ;
// 需要对表格进行排序,以便下一步中的公式能够发挥作用
dt1 <<种类(更换桌子,
经过( : ID , :识别号2 ) ,
命令(上升,上升)
) ;
// 添加辅助列
dt1 <<新专栏( “重复” ,
数字,
“名义” ,
格式( “最好的” , 12 ) ,
公式(如果( :识别号2 !=落后( :识别号2 , 1 ) |排() == 1 , 1 ,落后( :重复, 1 ) + 1 ) )
) ;
:重复<<删除公式; // 比 'for every row()' 更快
// 分裂
dt2 = dt1 <<分裂(
分割依据( :识别号2 ) ,
分裂( :价值) ,
团体( : ID , :重复)
) ;
// 删除一个辅助的柱子
dt2 <<删除列( :重复) ;
回复:拆分数据表问题你好塞巴斯蒂安霍夫迈斯特,
尝试这个:
dt =新表( “原始数据” ,
添加行( 16 ) ,
新专栏( “ID” ,
数字,
连续的,
格式( “最好的” , 12 ) ,
设定值( [ 1 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 3 , 3 , 3 , 3 , 4 , 4 , 4 , 4 ] )
) ,
新专栏( “ID2” ,
特点,
标称,
设定值(
{ “A” , “B” , “C” , “D” , “A” , “B” , “C” , “C” , “A” , “B” , “C” , “D” , “A” , “B” ,
“C” , “C” }
)
) ,
新专栏( “价值” ,
数字,
连续的,
格式( “最好的” , 12 ) ,
设定值(
[ 111 , 222 ,第333章,第444章, 111 , 222 ,第333章,第555章, 111 , 222 ,第555章,第444章, 111 , 222 ,
第555章,第666章]
)
)
) ;
// 需要对表格进行排序,以便下一步中的公式能够发挥作用
dt <<种类(更换桌子,
经过( : ID , :识别号2 ) ,
命令(上升,上升)
) ;
// 引入一个新的索引来识别重复项
dt <<新专栏( “ID3” ) ;
对于每一行(如果( // 不要在列中使用公式,因为它取决于稍后可能会更改的排序。
排() == 1 , ID3 =: ID ,
: ID !=落后( : ID , 1 ) | :识别号2 !=落后( :识别号2 , 1 ) , ID3 = : ID ,
ID3 =落后( : ID3 , 1 ) + 1
)) ;
// 现在你可以拆分表了
已排序= dt <<分裂(
分割依据( :识别号2 ) ,
分裂( :价值) ,
团体( : ID3 , : ID ) ,
输出表( “分割表” )
) ;
最好的,
罗恩
回复:拆分数据表问题哎呀! 抱歉,是的,塞巴斯蒂安。 也许类似?
// 添加辅助列
等待( 3 ) ;
dt1 <<新专栏( “重复” ,
数字,
“名义” ,
格式( “最好的” , 12 ) ,
公式(如果( :识别号2 !=落后( :识别号2 , 1 ) |排() == 1 , 1 ,落后( :重复, 1 ) + 1 ) )
) ;
回复:拆分数据表问题感谢伊恩的支持!
这或多或少就是我正在做的事情。 现实世界中的问题当然是数据集有大约 3k 行,我无法想象一个公式来自动而不是手动创建重复列。
您也知道解决方案吗? 我想避免编写嵌套多个 for 循环来生成“重复”列的脚本。 听起来效率很低。
谢谢,
塞巴斯蒂安
回复:拆分数据表问题我认为你需要一个辅助专栏,塞巴斯蒂安。
名称默认到这里( 1 ) ;
// 桌子
dt1 =新表( “塞巴斯蒂安” ,
添加行( 16 ) ,
新专栏( “ID” ,
数字,
“名义” ,
格式( “最好的” , 12 ) ,
设定值( [ 1 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 3 , 3 , 3 , 3 , 4 , 4 , 4 , 4 ] )
) ,
新专栏( “ID2” ,
特点,
“名义” ,
设定值(
{ “A” , “B” , “C” , “D” , “A” , “B” , “C” , “C” , “A” , “B” , “C” , “D” , “A” , “乙” ,
“C” , “C” }
)
) ,
新专栏( “价值” ,
数字,
“名义” ,
格式( “最好的” , 12 ) ,
设定值(
[ 111 , 222 ,第333章,第444章, 111 , 222 ,第333章,第555章, 111 , 222 ,第555章,第444章, 111 , 222 ,
第555章,第666章]
)
)
) ;
// 添加辅助列
等待( 3 ) ;
dt1 <<新专栏( “重复” ,
数字,
“名义” ,
格式( “最好的” , 12 ) ,
设定值( [ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 2 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 2 ] )
) ;
// 分裂
dt2 = dt1 <<分裂(
分割依据( :识别号2 ) ,
分裂( :价值) ,
团体( : ID , :重复)
) ;
// 删除辅助列
等待( 3 ) ;
dt2 <<删除列( :重复) ;