【问题标题】:Filtering out rows of data based on criteria from different columns in MATLAB根据 MA​​TLAB 中不同列的条件过滤掉数据行
【发布时间】:2017-08-15 03:43:14
【问题描述】:

我有一个实验的数据,其中每一行都是不同的试验。该表有几列包含有关试验的信息,然后是 1000 列数据。

我需要根据各种标准过滤掉某些试验(行),以便仅从有效试验中计算均值。例如,我有一列包含准确度数据(0 = 错误,1 = 正确),还有一列包含响应时间数据(需要过滤掉响应 200)。

然后,我需要创建仅按条件分组的有效试验的均值,这些条件由另一列中的字符串定义(例如,基于具有“负”、“中性”和“正”的价列创建 3 个均值)。我知道这可能相对简单,我是 MATLAB 新手。所有建议都表示赞赏。

Valence  Acc RTs NumNan Data1 
'Negative' 1 540 0 278.5148611 
'Negative' 1 597 0 89.18152778 
'Negative' 1 381 0 173.5148611 
'Negative' 1 471 0 19.51486111 
'Negative' 1 535 0 2.514861111

【问题讨论】:

  • 你能展示一些实际矩阵的示例行吗?
  • 当然。 e.g:价值VARC RTS NUMNAN DATA1'否定'1 540 0 278.5148611'否定'1 597 0 89.18152778'负'1 381 0 173.5148611'负'1 471 0 19.51486111'负'1 535 0 2.514861111 span>
  • 抱歉格式化。不知道如何最好地显示它。标头是 Valence、Acc、RTs、NumNan、Data1 数据例如:'Negative', 1, 381, 0, 173.51
  • 考虑创建一个table,然后通过在每一列上添加条件来访问该表,如this页面所示。​​

标签: matlab


【解决方案1】:

您可以使用布尔逻辑进行操作。

假设您的数据存储在矩阵A 中。

cond1 = A(:,2) == 1; % only select 'accurate' data 
cond2 = A(:,3) < 200; % response time <200 
cond3 = A(:,1) ~= 'Negative'; % non-negative trials

idx = cond1 & cond2 & cond3; % use 'AND' logic to find indices of satisfying records
B = A(idx,:); % pick out selected records and save in new matrix

【讨论】:

  • 感谢您的回复。我应该指定我的数据是一个表,所以我得到这个错误:“未定义的运算符'=='用于'表'类型的输入参数。”我尝试使用 table2array 但由于我的字符串而不起作用。
  • 没关系,需要 {} 而不是 () 非常感谢!
猜你喜欢
  • 2022-12-09
  • 2017-10-14
  • 2019-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-16
  • 1970-01-01
  • 2023-03-20
相关资源
最近更新 更多