我正在寻找一个公式来计算给定日期的注册数量。我的输入数据基于事件日志,看起来像这样:
acct1 | 2016年6月1日| 2016年6月1日
acct1 | 2016年6月1日| 2016年6月5日
acct2 | 2016年6月1日| 2016年6月2日
acct3 | 2016年6月1日| 2016年6月4日
acct3 | 2016年6月1日| 2016年6月6日
acct4 | 2016/03/03 2016年6月6日
以上是虚拟数据。但是我可以说我的输入数据有10k行。对于我的输出,在特定日期,我想查看输入数据并返回该特定日期的注册数量。我想要实现的是这样的:
06/01/2016 | 3
06/02/2016 | 0
06/03/2016 | 1
我知道我可能会在R中做这样的事情,但我正在我现在所做的工作中,这是优秀的。任何人对如何实现这一点都有任何想法?
答案 0 :(得分:1)
使用Excel的FREQUENCY()和数组公式:
假设
然后输入:
=SUM(IF(FREQUENCY(MATCH(IF(B$2:B$100=F2,A$2:A$100,""),IF(B$2:B$100=F2,A$2:A$100,""),0),MATCH(IF(B$2:B$100=F2,A$2:A$100,""),IF(B$2:B$100=F2,A$2:A$100,""),0))>0,1))-1
并按CTRL + SHIFT + ENTER将其作为数组公式输入。
答案 1 :(得分:1)
使用您的序列日期列表,例如F2:Fn
,您可以尝试数组输入公式:
G2: =SUM(1/COUNTIF(AccountName,AccountName)*(SignUpDay=F2))
AccountName
和SignUpDay
应仅参考现有数据范围(无空格)。如果有空白,则需要更复杂的公式。如果您使用带有结构化寻址的表格,名称可以自动调整。
此外,该公式假设同一帐户不会在一天以上注册。如果可能出现这种情况,则需要更复杂的公式。
例如:
=SUM(1/COUNTIF(SignUpTable[[AccountName ]],SignUpTable[[AccountName ]])*(SignUpTable[ [ SignUpDay ] ]=F2))
输入后, array-enter 一个公式
公式进入单元格或公式栏,按住
一边打。如果你这样做了
正确地说,Excel会在公式周围放置大括号 {...}
。
编辑:如果您的数据不符合上述限制条件,我会建议其中一个解决方案链接到@pnuts,在他的评论中,您可以在其中为数据添加一个额外的列公式:
=IF(SUMPRODUCT(($A$2:$A2=A2)*($B$2:$B2=B2))>1,0,1)
然后在“行”区域中构建一个带有SignUpDay
的数据透视表,并在“值”区域中构建一个新列。数据透视表解决方案的一个缺点是,没有注册的日期将不会在表格中表示。
在Excel 2013+中,可以在“值”区域中生成“唯一计数”,但是您提到使用的是Excel 2010,因此不太可能。