通过转置将数据子集从一个表移动到第二个表的列很抱歉再次发布此信息。 我已经发布了工作流程的点点滴滴,在此处进行了掩饰,以寻求帮助,但我仍在努力。 我在检查响应时遇到了困难,因为我对StackOverflow感到不好,没有真正的理由。 我敢肯定,随着时间的流逝,伤疤会he愈。 无论如何,我在附近,最终我会得到您的答复。
要达到技术要点:
我正在尝试将一些示例的运行日期(假设我在项目的实验室部分中一切正常,假设每个实例都在3次独立运行的情况下,应该分别运行3次)复制到清单文件的三个单独列中从我收集到的信息中,它可以跟踪项目中正在进行的元数据,因此每一列都是数据收集的一个实例。 有多个捐赠者,每个捐赠者都有一个捐赠者ID,并且在数据中有些冗余,例如仪器上针对“相同数据点”的多个收集通道(取决于您如何看待它),尽管我认为应该是这样。
这是我一直在尝试的伪代码,到目前为止,它还很粗糙。 我不知道为什么 我不是经验丰富的计算机科学家,开发人员或软件工程师。 任何帮助表示赞赏。
DataTypes:
(associative array) DonorID{
(key) Month1: (value) date1 (empty at start)
(key) Month2: (value) date2 (empty at start)
(key) Month3: (value) date3 (empty at start)
}
find unique donor IDs in data
for each donor ID{
get (i.e. subset) data keyed on donor ID;
for Month in 1, 2, 3 (strings){
if no date in donorID associative array{
add date from data;
}else if date already{
is the date in the data table cell the same as in the associative array entry?
if yes, do nothing (indicates different target channel)
if no, ping user
Multiple run dates for same data point is a problem.
}
}
}
Copy from data to manifest:
loop over DonorID associative array:
for each donorID:
in Month 1, 2, or 3:
add date1 2 or 3 to "Actual Month [1, 2, or 3] Stability Test Date" in manifest
donorID is still row identifier
date (1, 2, or 3) is now column identifier脚本编写回复:通过转置将数据子集从一个表移动到第二个表的列你好,
欢迎来到社区! 很抱歉,您在寻求帮助时在其他委员会上遇到过负面经验。 虽然JMP用户社区是一个欢迎和帮助的场所,但是有些“最佳实践”应该使您获得所需信息的机会最大化。
提出具体的问题,更普遍的问题,是您能否解决的方法,尽管我确实意识到有时一个“不知道他不知道的事情”。 发布大量的伪代码可能会使人们感到恐惧……如果您无法以其他方式提出问题,则附加“前”和“后”文件以及屏幕截图将大有帮助,因此观众将获得具体的信息。 “开始”表(或文本数据)和“完成”表的示例。 在这种特殊情况下,这肯定会带来真正的改变。 如果必须“清理”数据集,那就很好(最好,实际上)。 只要您想说明的观点仍然可以理解,那就很好了。
如果您提出针对性强的特定问题,并包括说明性文件和屏幕截图,则可能有很多人会为您提供帮助。 我能想到的很多副手实在无法抗拒!
干杯,
布雷迪
回复:通过转置将数据子集从一个表移动到第二个表的列谢谢布雷迪。回复:通过转置将数据子集从一个表移动到第二个表的列大家好。 到目前为止,这是我的代码:
Names Default To Here( 1 );
dt_data = Open( "[filepath, no issues here]" );
dt_manifest = Open( "[filepath, no issues here]" );
Summarize( dt_data, IDs = by( :ID ) ); //this finds all the unique IDs in the data file, which we will need //[no issues here]
//First, populate the temporary data structure--associative array--from the data file which we will then copy over to the manifest file.
For( i = 1, i <= N Items( IDs ), i++,
ID = IDs[i];
data_array = Associative Array( {"data1", "data2", "data3"}, {{}, {}, {}} ); //it appears in the print statements we get 3 copies, indicating this loop works
For( data = data_array << First, !Is Empty( data ), data = data_array << Next( data ), //looping through data_array's keys is clunky but done this way in JMP
Write( ID ); //just a check; works
data_array[data] = :Run date << Where(:ID == ID & :Timepoint == data); //does not work
//...continue with further code to transfer from LBCM_array to manifest
);
);我已经对其进行了清理,以便它是机密的(不必担心监视公司信息;),同时保留结构和信息(名称为“ a”的名称,从标签到标签)。
我的问题是此刻此行:
data_array[data] = :Run date << Where(:ID == ID & :Timepoint == data);
抛出错误信息
.
Name Unresolved: Run date in access or evaluation of 'Run date' , :Run date/*###*/
In the following script, error marked by /*###*/
...
data_array[data] = :Run date/*###*/ <<WHERE></WHERE>
:运行日期是我的数据表(特别是dt_data)中包含实验运行日期的数据列(标题)。 我正在尝试将它们传输到第二个文件,因为每个数据点应该已经被收集了三次/三次,所以这就是为什么data_array在初始化时具有三个键和三个空值。 这是数据去向的地方,这个关联数组(data_array)。 然后将其传送到dt_manifest,但是稍后,一旦这部分工作了,便会再发送给dt_manifest。
目前,我似乎无法访问该行
data_array[data] = :Run date << Where(:ID == ID & :Timepoint == data);
the appropriate selection of rows and columns I am interested in. 问题陈述在这个时间点是否足够清晰,以使听众中的任何人都可以介入,并提供解决方案或贡献,以关于如何以句法(或语义上)更正确的方式指定如何选择数据集的方式对(来自data_dt)感兴趣?
不用担心移调问题。 稍后我将进行处理,老实说,一旦数据位于aa(关联数组)中,这应该很容易。 在这一点上,我仍在学习如何处理行/列选择,数据表的子集等相关问题。
还有一点要注意:如果日期,数据和数组混合在一起似乎很奇怪,那很可能是因为我为数据列或相关数据实体的清理/匿名化标题/标签选择了较差的名称,以确保公司机密的安全。 我要说的整个过程仍然是菜鸟,我宁愿在安全方面犯错误。
从头到尾,我将继续致力于解决这个问题。
非常感谢,
麦克风
回复:通过转置将数据子集从一个表移动到第二个表的列麦克风,
对于为什么要使用关联数组,我仍然有些困惑,但是无论如何,我相信下面的代码将进入该数组,每个ID的3个测量行的日期值。我整理了一些数据,希望它们与您的数据布局相似。我只是根据您的陈述和代码用法来猜测。

这是脚本。上面的数据表是在脚本的开头生成的,因此,经过我的修改的代码胆量低于数据表的生成。
Names Default To Here( 1 );
dt_data = New Table( "Example",
Add Rows( 6 ),
New Column( "ID", Character, "Nominal", Set Values( {"A", "A", "A", "B", "B", "B"} ) ),
New Column( "Run Date",
Numeric,
"Continuous",
Format( "m/d/y", 12 ),
Input Format( "m/d/y" ),
Set Values( [3692304000, 3694982400, 3697401600, 3700080000, 3702672000, 3705350400] )
),
New Column( "TimePoint", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [., ., ., ., ., .] ) )
);
//dt_manifest = Open( "[filepath, no issues here]" );
Summarize( dt_data, IDs = by( :ID ) ); //this finds all the unique IDs in the data file, which we will need //[no issues here]
//First, populate the temporary data structure--associative array--from the data file which we will then copy over to the manifest file.
For( i = 1, i <= N Items( IDs ), i++,
ID = IDs[i];
theRows = dt_data << get rows where( :ID == ID );
data_array = Associative Array( {"data1", "data2", "data3"}, {{}, {}, {}} );
k=0;
For( data = data_array << First, !Is Empty( data ), data = data_array << Next( data ), //looping through data_array's keys is clunky but done this way in JMP
k++;
show( ID ); //just a check; works
data_array[data] = :Run date[theRows[k]];
//...continue with further code to transfer from LBCM_array to manifest
);
show(data_array);
);
代码的结果在日志中列出
ID = "A";
ID = "A";
ID = "A";
data_array = ["data1" => 3692304000, "data2" => 3694982400, "data3" => 3697401600];
ID = "B";
ID = "B";
ID = "B";
data_array = ["data1" => 3700080000, "data2" => 3702672000, "data3" => 3705350400];
data_array中的数字是运行日期的数值。
回复:通过转置将数据子集从一个表移动到第二个表的列你好,
你写:
我的问题是此刻此行:
data_array[data] = :Run date << Where(:ID == ID & :Timepoint == data);
我看到了一些潜在的问题...请务必仔细研究以下问题:
1):如所写,运行日期指的是在解释此行代码时当前数据表中的列。 从错误消息看来,在解释此行代码时,当前数据表不包含称为“运行日期”的列。 我看到您打开了两个表;如果将要使用的表留给JMP,请始终确保目标表确实是当前表。 您可以使用“当前数据表”命令强制将要成为当前表的任何表:
dt1 = open("firstfile");
dt2 = open("secondfile");
Current Data Table (dt1); // sets first table current
Current Data Table (dt2); //sets second table current
但是,您不必由JMP来决定。 您可以使用桌子:栏格式,如:
dt1:Run Date
2)解决表格货币问题后,您需要使用<<获取行,其中()消息,发送到适当的数据表,以返回满足某些条件的行。 通常,就像您的情况一样,它们被用作索引。 假设您要使用dt1,则代码将显示为:
data_array[data] = dt1:Run Date[dt1 << Get rows Where(:ID == ID & :Timepoint == data)];
该行完成3项工作:
1)获取dt1中满足某些条件的行,并以向量形式返回它们。 请注意,因为<<获取行where()消息发送到dt1时,可以理解:ID和:Timepoint也在dt1中。
2)使用在上面的步骤1中返回的向量作为dt1:Run Date(dt1中的“运行日期”列)的索引。 因为我们已使用dt1:Run Date将运行日期明确地限定于dt1表,所以dt1是否碰巧是当前表都没有关系。 第二步完成后,会从“运行日期”列返回一个值的向量-正是我们想要的值。
3)将上述步骤2中返回的“运行日期”值的向量分配为特定键的值,数据,在关联数组中数据数组。
干杯,
布雷迪
回复:通过转置将数据子集从一个表移动到第二个表的列嗨,吉姆。 感谢您的答复。 您介意用人工英语解释您的代码如何工作吗? 我的解释是:ID唯一的所有行都放在theRows中。 然后,实例化索引k。在将运行日期添加到数据数组的循环内,它会递增。现在,在此循环内,而不是我以前拥有的,Rows中的每个唯一值都用作访问:Run date的索引,并且该结果填充到数据数组中。
如果只学习更长的时间,这对我来说是有意义的。 乍一看还不太清楚。 没有把握。 但是,您确实会在文章结尾用一句话的结论来解释。
在用代码中的实际变量替换所有清理后的变量后,出现错误:
invalid subscript (must be number or list of numbers) in access or evaluation of 'theRows[k]' , theRows[/*###*/k]
而且我不知道为什么。
我仍然很困惑,我将继续研究这段代码。 奇怪的是,我在大学里上过很多编码课,但是我没有维护自己的知识库,所以我认为它可能会随着时间的流逝而逐渐消失。
感谢您的帮助!
麦可
PS:关于为何使用关联数组:作为具有JMP入门经验的JMP初学者,这将是一种有效的数据传输方式,它具有更多的Java / Python经验。 您是否建议直接操作表格? 不过,我到目前为止仍然走这条路,我想知道以这种方式完成手头的任务是否很有趣。
回复:使用转置将数据子集从一个表移动到第二个表的列谢谢你,布雷迪。 这一切对我来说都很有意义。
看起来其中一些事情实际上是我代码中的问题。 我已经向他们提出了要求,并且正在前进。 我有一些新问题,我会在弄清楚后发布。
麦克风