Data structures Mathematica中的条件数据合并
我需要合并来自两个不同来源的数据。下表说明了我的情况: 以及所需的输出: 这个想法是:Data structures Mathematica中的条件数据合并,data-structures,merge,wolfram-mathematica,conditional,Data Structures,Merge,Wolfram Mathematica,Conditional,我需要合并来自两个不同来源的数据。下表说明了我的情况: 以及所需的输出: 这个想法是: 查看表1的第一列(TrialNO) 请在表2的第一列中查找 检查第二列中的值是否相等 (实际上,这些列不会位于两个列表中的相同位置) 如果检查通过,将第3列和第4列(第1列和第2列)中的值附加到表2中的行中 我不认为我会将标题保留在真实的结构中,因此它不应该代表一个额外的问题,但是处理标题的建议是受欢迎的(是否将它们删除并存储在其他地方,或者以特殊的方式处理它们) ** 编辑:对我的数据和我的目标的形
- 查看表1的第一列(TrialNO)
- 请在表2的第一列中查找
- 检查第二列中的值是否相等 (实际上,这些列不会位于两个列表中的相同位置)
- 如果检查通过,将第3列和第4列(第1列和第2列)中的值附加到表2中的行中
- 我不认为我会将标题保留在真实的结构中,因此它不应该代表一个额外的问题,但是处理标题的建议是受欢迎的(是否将它们删除并存储在其他地方,或者以特殊的方式处理它们)
- 每次试验包括两次连续显示,每次显示3秒。它是一个2AFC(两个可选的强制选择)
- 每个显示器都包含一个框架(约为屏幕大小的1/4),其中包含8个形状,在屏幕的4个象限中显示1个
- 框架本身的构成有5个条件,因此每次试验可能有10个条件(1个框架条件与另一个框架条件不重复)
- 有两种测量方法:对象的选择和观察刺激时记录的眼动
- 提供以下功能的“显示”机器
- “眼球跟踪”机器提供:
- 第一步是合并2-2数据结构,以获得一个大数据结构,每行对应一个固定
- 必须对每个受试者执行此操作,然后将受试者数据聚合在一起
- 提取标题和列编号
- 以漂亮的表格形式分组展示 -一般信息(试验ID、条件、受试者ID…), -显示信息(屏幕上对象的坐标), -固定信息等
- 为每个变量提供数据类型(字符串、数字、文本)、范围、列采用的不同值以及一些基本描述性统计信息的摘要
- 有条件地提取该集合部分的系统(例如:提取条件编号、定影持续时间,以供特定主题选择显示) 这样,我提取了一些定义良好的表,然后在不接触原始数据的情况下运行分析
MergeTables[data1_, data2_, samepos1_, samepos2_] :=
Cases[data1,
x_ :> Block[{y =
Cases[data2, z_ /; z[[samepos2]] === x[[samepos1]]]},
Apply[Sequence, Join[x, Delete[#, Thread[{samepos2}]]] & /@ y]]]
用法:
MergeTables[data2, data1, {1, 2}, {1, 2}]
萨沙的回答太酷了,我甚至不知道它是如何工作的 这是我的尝试,作为一个结构多于功能的程序员,我使用了一个表[](OMG!)来完成它。表[]仍然处于函数式编程的边缘:) (这里A是数据2,B是数据1)
--纳赛尔我等待对您的数据进行更详细的描述,以便更好地进行优化
checkMerge[src_, trg_, si_, ti_, sp_] :=
Module[{rls, ext},
rls = #[[si]] -> #[[sp]] & /@ src;
AppendTo[rls, _ -> {,}];
ext = Replace[trg[[All, ti]], Dispatch@rls, 1];
ArrayFlatten[{{trg, ext}}]
]
语法是:
=“源”列表(数据1)src
=“目标”列表(数据2)trg
=要比较的源索引列表si
=要比较的目标索引列表ti
=从源添加到目标的索引列表sp
checkMerge[data1, data2, {1,2}, {1,2}, {3,4}]
我不得不从以下方面猜测变化的程度: (实际上,这些列不会位于两个列表中的相同位置) 因此,这可能具有太多或太少的特异性
sp
必须是一个包含两个索引(列号)的列表,因为这使事情变得更简单,我不确定您想要什么。您想指定哪些元素取自data1
并附加到data2
,还是应该是比较后的所有元素,还是其他元素si
、ti
、sp
的标准值,则可以添加默认值,以便您可以忽略这些值,除非需要不同的值
checkMerge[data1, data2, {1,2}, {1,2}, {3,4}]