问题描述
我正在处理一份美国冲突事件的电子表格。每一行代表一个事件,并包含地理和时间信息。冲突事件往往以“波浪”的形式发生(相对紧密的时间分组)。我为每一波都生成了一个身份变量,并想创建一个变量来衡量这些冲突事件在每一波中的地理分布。
我使用 Excel 来做这件事。数据已经按地区、日期和波次排序。
数据描述
数据集结构如下:
Country Region Date Event Wave
------- ------- ------ ------- ------
USA Vermont 5/1/2017 Strike Wave 1
USA Vermont 5/2/2017 Strike Wave 1
USA New Hamp. 5/3/2017 Strike Wave 1
USA Vermont 5/3/2017 Strike Wave 1
USA Maine 5/4/2017 Strike Wave 1
USA Washingt. 8/16/2018 Riot Wave 2
USA Washingt. 8/18/2018 Riot Wave 2
USA Oregon 8/18/2018 Protest Wave 2
USA Californ. 8/19/2018 Riot Wave 2
USA Nevada 8/20/2018 Protest Wave 2
USA Idaho 8/20/2018 Riot Wave 2
我想要创造什么
我想创建一个变量(“geo_disp”)来记录区域在特定时期内经历过冲突海浪。您会注意到,当两个事件发生在同一天但发生在不同地点时,两者都会记录区域总数。以下是我希望数据的样子:
Country Region Date Event Wave geo_disp
------- ------- ------ ------- ------ --------
USA Vermont 5/1/2017 Strike Wave 1 1
USA Vermont 5/2/2017 Strike Wave 1 1
USA New Hamp. 5/3/2017 Strike Wave 1 2
USA Vermont 5/3/2017 Strike Wave 1 2
USA Maine 5/4/2017 Strike Wave 1 3
USA Washingt. 8/16/2018 Riot Wave 2 1
USA Washingt. 8/18/2018 Riot Wave 2 2
USA Oregon 8/18/2018 Protest Wave 2 2
USA Californ. 8/19/2018 Riot Wave 2 3
USA Nevada 8/20/2018 Protest Wave 2 5
USA Idaho 8/20/2018 Riot Wave 2 5
我如何创建geo_disp使用 Excel 的变量?
提前感谢您——我非常感激。
答案1
如果您使用 Excel 365 并且可以访问动态数组函数 FILTER 和 UNIQUE,则可以执行以下操作:
geo_disp_1:(地理显示1:
=COUNTA(UNIQUE(FILTER($B$4:$B4,$E$4:$E4=$E4)))
地理显示:
=MAXIFS($F$4:$F$14,$E$4:$E$14,$E4,$C$4:$C$14,$C4)
这是我到达那里的过程
首先,我知道我可以使用 TRANSPOSE 水平返回垂直项目的数组。这使我能够使用锚定到第一行的范围来生成以下内容:
我意识到当 Wave 发生变化时我想重新启动这些列表,因此我使用 FILTER 仅将与当前 wave 匹配的行传递到 TRANSPOSE 函数中。
这样稍微好一点,但我不想要重复的。因此,我可以使用 UNIQUE 来删除它们,请记住,我需要将第二个参数设置为 TRUE,因为这是一个水平数组。
现在只需计算每行中的项目数:
在这样直观地处理之后,我将其转换为更简单的内容。实际上,您不需要以这种方式转置数组。这就是我得到 geo_disp_1 公式的方法(如上所示)。
剩下的最后一个挑战是确保考虑到这个“同一日期的多个区域”问题。我没有立即找到一个明显的方法来做到这一点,除非有一个单独的列,该列基于波次和日期相同而取 geo_disp_1 的最大值。