我行一千,在Excel工作表,其中有一个地方得到了病人感染了病毒,当她被治好了日期。我也有在第三列,病毒ID,它就像一个外键,并指向另一个Excel工作表,其中的病毒名称存储,与virusID一起。日期格式如下:
column A: patient infected date
2002-01-22 13:25:41
column B: patient healed date
2002-01-24 10:35:21
什么我尝试做的,是有说100倍最通常所见的病毒,即已经感染,并在同一年被治好了,沿着他们的头衔。 (因此感染和治愈年必须都说2002)
类似的东西(按出现次数排序,2002年):
virus1 | name of virus1 | number of occurrences
virus2 | name of virus2 | number of occurrences
我应该使用哪个Excel公式?或者有人可以为我提供openrefine解决方案,甚至更好。试过INDEX,MATCH,没有运气。
答案 0 :(得分:0)
对于OpenRefine,我将执行以下操作:
forEach(cell.cross("project_2","virus_id"),r,r.cells["virus_name"].value).join("|")
(value.substring(0,4) == cells["healed_date"].value.substring(0,4)).toString()
如果您需要做更精确的“日期”相比较(如发现感染和愈合的日期是在彼此365天是),你可以在OpenRefine这些值转换为日期和使用GREL功能diff
找到天的两个日期之间的数(或数月,数年,小时等)
答案 1 :(得分:0)
我通常会逐步解决这类问题。首先,确保在Excel中将A列和B列识别为日期。 C列是您的病毒ID。我将D列设置为一年感染的列,将公式= YEAR(A2)复制到该列的其余单元格中。 E列应为Year's Healed,将= YEAR(B2)复制到该列的其余单元格中。 F列将使用= IF(E2 = D2,1,0)指示年份是否匹配。
最后,这项工作的重点在于使用countifs函数。 G列应具有公式= COUNTIFS(C $ 2:C $ 541,C2,F $ 2:F $ 541,1)的单元格。在我的测试示例中,我只有通过第541行的数据。但是,您将拥有许多行。将541替换为您的最后一行。要获取病毒名称,您将使用病毒ID将工作表与病毒ID和病毒名称匹配,例如:= LOOKUP(C2,Viruses!A $ 2:A $ 4,Viruses!B $ 2:B $ 4)假定A列是病毒ID,B列是病毒名称,并且它们都具有一行标题。在我的样本中,我只有3种病毒。
一旦有了这些列,就按count列(从最大到最小)排序,然后通过Data消除重复项,移除重复项。取消选中除病毒计数列之外的所有列,您应该拥有所需的内容。如果只需要特定年份的数据,请在删除重复项之前按年份列之一进行过滤。