MATLAB中ANOVAN矩阵数据的格式化

MATLAB中ANOVAN矩阵数据的格式化,matlab,matrix,Matlab,Matrix,我有一个数据值矩阵,看起来有点像这样,但要大得多(2000多行,30多列): 因此,您可以看到,它主要由NaN值填充。当然,我感兴趣的是由值填充的单元格 我希望能够在这个数据集上运行anovan,不幸的是,它太大,无法手动重新格式化。我要做的是让脚本在矩阵中运行,找到矩阵中不是NaN的每个值及其索引,并为anovan输入创建三个数组: 数值=[12 3 18 42 68 14 26…] 行=[1 1 2 2…] 列=[2 3 5 7 1 3 11…] 行和列对应于研究中的评分者和评分者,这就是为

我有一个数据值矩阵,看起来有点像这样,但要大得多(2000多行,30多列):

因此,您可以看到,它主要由NaN值填充。当然,我感兴趣的是由值填充的单元格

我希望能够在这个数据集上运行anovan,不幸的是,它太大,无法手动重新格式化。我要做的是让脚本在矩阵中运行,找到矩阵中不是NaN的每个值及其索引,并为anovan输入创建三个数组:

数值=[12 3 18 42 68 14 26…]

行=[1 1 2 2…]

列=[2 3 5 7 1 3 11…]

行和列对应于研究中的评分者和评分者,这就是为什么它们对我来说保留每个值的精确索引非常重要

不过,我不知道该怎么做

我尝试过使用find,但无法让它执行我想要的操作

[r c v] = find(~isnan(datamatrix)) %% doesn't work
编辑:我突然想到我可以做:

[r c v] = find(datamatrix)
不过,这将包括[RCV]输出中的所有NaN值。在这种情况下,我如何遍历V数组并删除NaN值及其相应的R和C值


编辑2:划破它。我忘记了我的一些值是0,所以我不能使用FIND命令。

您可以从数据矩阵中提取所有非NaN数字及其索引,如下所示:

i = find(~isnan(datamatrix)); 
values = datamatrix(i);
[rows,columns] = ind2sub(size(datamatrix),i);
对于包含的示例数据,这将导致:

rows' = [2   1   1   2   1   1   2]
columns' = [ 1    2    3    3    5    7   11]
values' = [68   12    3   14   18   42   26]

这就是所有的指数和它们对应的值。如果您需要以特定的方式订购,则必须单独订购

啊,我知道我快要弄明白了,但我不知道ind2sub命令!谢谢
rows' = [2   1   1   2   1   1   2]
columns' = [ 1    2    3    3    5    7   11]
values' = [68   12    3   14   18   42   26]