在Excel中更改轮廓的形状
我正在Windows 7上运行Office Professional Plus 2013。
有一个matrix如下图所示:
完整的matrix数据可以在这个Google电子表格中find。 有两个选项卡 – 通用术语和特定术语。
matrix是用来分类的items
– 如特定的植物。 有一些items
分配给这个matrix,但没有显示出来减less复杂性。
matrix是一个归一化的matrix,意思是列是固定的 – matrix中有所有可能的值。 但是在许多情况下,列没有值(NULL值)。 例如,第8行的属是由kingdom : subkingdom : division : class : order : family : genus
定义的kingdom : subkingdom : division : class : order : family : genus
。
列subdivision
, subclass
, superorder
, suborder
和family
不用于定义特定的属。 相比之下,第14行的属性由subdivision
定义。
使用符号,规范化的matrix看起来如下:
我们的目标是创build一个非规范化的matrix – 重塑一个列不再有意义的matrix,但只是大纲中的一个级别。 一般的做法是删除一个NULL单元格,然后在下一行中移动其依赖的“children”。
手动过程将是:
- 删除D5并向左移动
Class
。 - 删除E6并向左移动
Order
。 - 重复令人厌恶。
非归一化matrix看起来像这样:
幸运的是,前三列中的符号永远不是NULL(C常数) – 我们可以引用它们,但不需要移动它们。 但是在所有其他列中的符号的位置是可变的(V-variables),这取决于哪个空值已被删除。
有一个皱纹。 有些情况下,一个item
(暗示,但没有显示)没有映射到genus
。 相反,该item
被映射到更广泛的术语,如family
。 行15是family
是terminal节点的例子; genus
不用于定义这个item
。
如何创build一个Excel公式或脚本:
- 删除一个NULL位置
- 在删除NULL位置的行上移动该项
- 在与父单元格相关的下一行上,将术语移到左边?
如果使用名称( division
, subdivision
, class
等)比使用符号更容易,那没关系。 Google电子表格提供了通用术语和特定术语。
以下是基于公式的解决scheme的示例输出:
有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),"")
计算所有行需要一些时间,但我认为它会产生所需的输出。
编辑:
我想我在我的解决scheme中发现了一个bug, N2
的公式应该是:
=IF(M2-M1>0,N1+1,LOOKUP(2,1/($M$1:M1<M2),$N$1:N1)+1)
我之前没有注意到它,因为它影响了第2468
行( Amborellanae
)。