在Windows 7上运行Office Professional Plus 2013。
有一个矩阵,如下图所示:
在此Google spreadsheet中找到完整的矩阵数据。有两个选项卡 - 通用术语和特定术语。
Matrix用于对items
进行分类 - 例如特定植物。有items
分配给此矩阵,但未显示它们以降低复杂性。
矩阵是一个归一化矩阵,意味着列是固定的 - 矩阵中有所有可能值的位置。但在许多情况下,列没有值(NULL值)。例如,第8行的属由kingdom : subkingdom : division : class : order : family : genus
定义。
列subdivision
,subclass
,superorder
,suborder
和family
不用于定义特定属。相反,第14行的genus
由subdivision
定义。
使用符号,规范化矩阵如下所示:
目标是创建一个非规范化矩阵 - 重新构造一个列不再有意义的矩阵,但它只是轮廓中的一个级别。一般的方法是删除一个NULL单元格 - 并在下一行 - 移动其依赖的"孩子"左
手动过程将是:
Class
。Order
。反规范化矩阵如下所示:
幸运的是,前三列中的符号永远不会为NULL(C - 常量) - 我们可以引用它们,但不需要移动它们。但是,所有其他列中符号的位置是可变的(V - 变量),具体取决于已删除的空值。
有一个皱纹。有些情况下item
(隐含但未显示)未映射到genus
。相反,item
会映射到更广泛的术语,例如family
。第15行是family
是终端节点的示例; genus
不用于定义此item
。
如何创建以下内容的Excel公式或脚本:
如果使用名称(division
,subdivision
,class
等)比使用符号更容易,那就没问题了。 Google电子表格提供了通用术语和特定术语。
答案 0 :(得分:1)
这是我基于公式的解决方案的示例输出:
有2个辅助列(M
,N
)。
M2
中的公式(计算当前项目在行中的位置),用它填充列:
=MATCH("*",A2:L2,0)
N2
中的公式(计算新项目在行中的位置),用它填充列:
=IF(M2-M1>0,N1+1,IFERROR(LOOKUP(2,1/($M$1:M1=M2),$N$1:N1),M2))
O2中的公式只是将项放在右列中,用它填充整个范围:
=IF($N2=O$1,INDEX($A2:$L2,1,$M2),"")
计算所有行需要一些时间,但我认为它会产生所需的输出。
编辑:
我想我在我的解决方案中发现了一个错误,N2
中的公式应该是:
=IF(M2-M1>0,N1+1,LOOKUP(2,1/($M$1:M1<M2),$N$1:N1)+1)
我之前没有注意到它,因为它会影响行2468
(Amborellanae
)。