在 Matlab 中,如何删除数据中所有 NA 或某些 NA 的行。
我有一个包含列的表格date open high low close volume
日期存在于所有行中。
某些行具有除带有 NA 的日期之外的所有其他列。
有些行的所有信息都正常,但收盘价除外。
- 如何获得没有"NA"行的表(除
date
之外的所有NA
)? - 如何获取仅包含
close
有数据(数字)的行的表? - 如何获得一个仅包含
close
为非零数的行的表。 - 相反,我如何获得一个表,其中只有除了具有 NA 的
close
行之外一切都好的行?
我在矩阵的 Matlab 文档中看到了这一点:
>> X = [10; 0.04500; 0; NaN; NaN];
>>X(isnan(X)) = []
ans = [10; 0,04500, 0]
这对于所有值都是 NAN(这绝不是我的情况,因为日期"索引"列始终有效......
A(~any(~isnan(A), 2),:)=[];
如果我理解正确,这意味着伪代码:
all in matrix A(hasno(numeric(A), INCOLUMNS), FORALLCOLUMNS) =? [];
这导致所有行在其中一列中至少包含一个数字。
。但是,对于表和仅检查数据字段,是否有类似的东西?
如果您使用的是Matlab R2016b
或更高版本,则要删除缺少值的表行,您所要做的就是:
mytable = rmmissing(mytable);
请注意,根据官方文档,这也适用于数组:
R = rmmissing(A) 从数组或表中删除缺失的条目。如果 A 是一个向量,然后 rmmissing 删除任何包含缺失的条目 数据。如果 A 是矩阵或表,则 rmmissing 会删除任何 包含缺失的数据。缺失值根据 A 的数据类型:
NaN - 双精度、单精度、持续时间和日历持续时间
NaT - 日期时间
"缺失" - 字符串
"未定义" - 分类
'' - 字符
{''} - 字符数组的单元格
如果您使用的是早期版本,请选择:
mytable = mytable(~any(ismissing(mytable),2),:);
可以在此处找到有关此论点的很好的多用途教程。