【问题标题】:How to add values to last column of a table based on certain conditions in MATLAB?如何根据 MA​​TLAB 中的某些条件将值添加到表的最后一列?
【发布时间】:2018-10-05 09:48:54
【问题描述】:

我有一个 29736 x 6 的表,称为 table_fault_test_data。它有 6 列,分别命名为 wind_direction、wind_speed、air_temperature、air_pressure、density_hubheight 和 Fault_Condition。我想要做的是标记 Fault_Condition 中的数据(最后一个表列具有 1 或 0 值,具体取决于其他列中的值。

我想做以下检查(例如)

  1. 如果 wind_direction 值(column_1)低于 0.0040 且高于 359.9940,则将对应表中相应行的第 6 列条目标记为 1,否则标记为 0。
  2. 对整个表执行此操作。同样,为其他人做这个检查 如空气温度、空气压力等。我知道 if-else 将用于这些检查。但是,我真的很困惑我如何 可以对整个表执行此操作并将相应的值添加到 第 6 列(也许使用循环或其他东西)。

这方面的任何帮助 高度赞赏。非常感谢!

编辑: 进一步说明:我有一个名为 table_fault_test_data 的 29736 x 6 表。我想根据以下条件将值添加到表的第 6 列:-

for i = 1:29736 % Iterating over the whole table row by row
    if(1st column value <x  | 1st column value > y)
         % Add 0 to the Corresponding element of 6 th column i.e. table_fault_test_data(i,6)
    elseif (2nd column value <x  | 2nd column value > y)
         % Add 0 to the Corresponding element of 6 th column i.e. table_fault_test_data(i,6)
    elseif ... do this for other cases as well
    else
         % Add 1 to the Corresponding element of 6 th column i.e. table_fault_test_data(i,6)

这是我要求的本质。我希望这有助于更好地理解这个问题。

【问题讨论】:

  • 第 1 点本身并不清楚。您能否以小表格的形式给出正确的示例。其他人帮助你会非常有帮助。总是从文本中理解是非常复杂的。为避免理解上的冲突,请提供一些示例
  • 我已经澄清了细节。请查看编辑。谢谢!

标签: matlab for-loop if-statement display


【解决方案1】:

您可以使用逻辑索引,表也支持该索引(如果可能,应避免使用 for 循环)。例如,假设您要实现第一个条件,并且还假设您的 x 和 y 已知;另外,让我们假设您的表名为 t

logicalIndecesFirstCondition = t{:,1} < x | t{:,2} >y

然后您可以参考使用逻辑索引验证此条件的行(请参阅logical indexing

例如:

t{logicalIndecesFirstCondition  , 6} = t{logicalIndecesFirstCondition  , 6} + 1.0; 

对于逻辑条件为真的行,这会将 1.0 添加到第 6 列

【讨论】:

  • 感谢您的回答。但是我能问你为什么使用 t{:,2} > y。不应该是 t{:,1} >y 因为我想在第一个条件的情况下检查第一列的值是否为 >y。
  • 我仍然遇到问题。正如你所说,我的桌子是 29736x6。我真的很困惑,如果你能把它写得更详细一点,我将不胜感激。我经历了逻辑索引并且能够创建您建议的这个东西,但我仍然无法理解如何在没有 for 循环的情况下使用它。我的意思是,准确地说,假设我的表的第 6 列最初都是 0,并且基于其他 5 列(1-5 列)的值,如果满足特定条件,我想在其中输入 1。
  • 只要您的表格包含双用大括号,您就可以引用内容(不是表格的子表格)。因此,例如,为了识别列 K 上满足特定条件的变量,您要做的就是公开表的内容(或者,在这种情况下,是列的内容)。例如:假设您想将 1.0 添加到第 3 列的元素,但仅适用于第二列为正的行;你会用这样的方式来做 rowsWithPosNumbersOnCol2 = t{:,2} > 0 ; t{rowsWithPosNumbersOnCol2 , 3} = t{rowsWithPosNumbersOnCol2 , 3} + 1;
  • 第一行:给我条件为真的逻辑索引(第二列为正);第二行:获取第三列中第一行写的条件为真的值,并将它们设置为等于它们的实际值加一。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-14
  • 2021-07-16
  • 1970-01-01
  • 2018-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多