Mathematica中的条件数据合并

如何解决Mathematica中的条件数据合并

| 我需要合并来自2个不同来源的数据。下表说明了我所拥有的: 和所需的输出: 这个想法是: 看看第一列。表1(TrialNO) 在第一栏寻找它。表2。 检查第二个列中的值。相等 (实际上,这些列不会位于2个列表中的相同位置) 如果Check通过,则附加位于col的值。 3和4(Cond1和Cond2)到表2中的行。 我认为我不会将标头保留在实际的结构中,因此它不应代表其他问题,但是欢迎您处理标头的建议(无论是删除标头并将其存储在其他位置还是以特殊方式处理它们) ) ** 编辑:在我的数据和目标的形状上提供精确度 ** 我将对如何获取这些数据以阐明其形状提供一些背景知识。我相信可以从技术上更准确地描述它。请不要犹豫,纠正我。 我正在记录眼睛的动作(扫视和注视),并且受试者在屏幕上显示刺激的同时回答任务。 每个试验由两个连续的显示组成,每个显示3秒。它是2AFC(两种选择的强制选择)。 每个显示都包含一个显示框(约占屏幕大小的1/4),其中有8个形状,显示在屏幕的4个象限中的1个象限中。 框架本身的构成有5个条件,因此每次试验可能有10个条件(1个条件与另一个条件无重复)。 有两种测量方法:选择对象和在观察刺激时记录的眼球运动。 我从2个不同的来源获得这些数据: 提供的“显示”机器 -试用编号/显示编号 -有关屏幕的信息 -条件 -主题答案 -X和Y坐标以及组成所显示刺激的11个对象的大小。 在此矩阵中,每一行都是一个Display,因此DisplayNO列将从1变为400(1,2,3,4,...,400),而TrialNO列实际上从1变为200(1,1,2 ,2,..,200,200) 因为每个审判有2个显示器。 “眼动追踪”机器提供: -一些类似的信息(显示编号(1到400),将用于合并2,条件编号,可用于检查映射投注。2) 然后是描述眼睛运动的大量变量: -修复和扫视的持续时间,位置,时间等(约100列) 在此矩阵中,每一行都是一个注视。然后在列(上一个和下一个扫视)中给出扫视特性,每个显示可能有1到30-50个注视。结果,我可能在第一个显示中有19行数据,而在第二个显示中有5行数据。 第一步是合并2 2 2数据结构,以获得一个大结构,每行对应一个固定。 将必须对每个主题都执行此操作,然后将主题数据相互汇总。 这是我以后处理这个怪物的计划(这将在其他问题中解释我的需求): 提取标题和列号。 按小组以漂亮的表格形式展示它们 -常规信息(试验ID,条件,主题ID ...), -显示信息(屏幕上对象的坐标), -修复信息等... 对于每个变量,都有数据类型(字符串,数字,文本),范围,列采用多少个不同值以及一些基本描述性统计的摘要。 一个有条件地提取此集合的部分的系统(例如:提取条件编号,注视时间,以供特定对象选择显示) 这样,我就可以提取一些定义明确的表,然后在不影响原始数据的情况下进行分析。 如果我使用我的精确情况来提出我的问题,我相信,这可能会产生一个很好的,高效且易于使用图形的工具来处理大量数据集。     

解决方法

我正在等待您对数据进行更详细的描述,以便更好地进行优化。
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}}]
 ]
语法为:
src
= \“源\”列表(数据1)
trg
= \“ target \”列表(数据2)
si
=来自源的索引列表以进行比较
ti
=要比较的目标的索引列表
sp
=从源到目标的索引列表 对于您的示例,这将是:
checkMerge[data1,data2,{1,2},{3,4}]
我不得不猜测要适应的更改级别:   (实际上,这些列不会位于2个列表中的相同位置) 因此,这可能具有太多或太少的特异性。 目前,
sp
必须是两个索引(列号)的列表,仅因为这会使事情变得简单一些,而且我不确定您想要什么。您是否要指定哪些元素是从
data1
提取并追加到
data2
,还是应该是所有被比较元素之后的元素,还是其他? 如果存在
si
ti
sp
的标准值,则可以添加默认值,以便您可以省略这些值,除非需要其他值。 我认为可以扩展与
Null
不匹配的行以创建矩形数组。如果您愿意的话,可以将它们删除,以产生一个破烂的数组。     ,这是一种可能性:
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,2}]
    ,Sasha的答案太酷了,我什至不知道它是如何工作的。 这是我的尝试,并且作为结构而非功能程序员,我使用了Table [](OMG!)。好了,Table []仍然处于函数式编程的边缘:) (这里A是data2,而B是data1)
n=Length[A];  m=Length[B];

isMatch[a_,b_] := a[[1]]=== b[[1]]&&a[[2]]===b[[2]]

A[[1]] = A[[1]]~Join~B[[1,3;;-1]]; (*do the header on its own*)

Table[If[ isMatch[B[[i]],A[[j]]],A[[j]] = Join[A[[j]],B[[i,3;;-1]]] 
     ],{i,2,m},{j,n}        
];

A//TableForm
-纳赛尔     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)> insert overwrite table dwd_trade_cart_add_inc > select data.id, > data.user_id, > data.course_id, > date_format(
错误1 hive (edu)> insert into huanhuan values(1,'haoge'); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive> show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 <configuration> <property> <name>yarn.nodemanager.res