извлечь только строки определенного года и посчитать наиболее видимые значения - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть тысячи строк в листе Excel, в которых указаны даты, когда пациентка заразилась вирусом и когда она была исцелена.У меня также есть в третьем столбце идентификатор вируса, который похож на внешний ключ и указывает на другой лист Excel, где хранится имя вируса и идентификатор вируса.Формат даты выглядит следующим образом:

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, без удачи.

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Обычно я решаю подобные проблемы поэтапно.Сначала убедитесь, что столбец A и столбец B распознаются как даты в Excel.Столбцы C - это ваш вирусный идентификатор.Я бы сделал столбец D зараженным за год столбцом с формулой = YEAR (A2), скопированной в остальные ячейки столбца.Столбец E должен иметь год исцеления с = YEAR (B2), скопированный в остальные ячейки столбца.В столбце F будет указано, совпадают ли годы с использованием = IF (E2 = D2,1,0).

Наконец, основная часть работы выполняется с помощью функции countifs.Столбец G должен иметь ячейки с формулой = COUNTIFS (C $ 2: C $ 541, C2, F $ 2: F $ 541,1).В моем тестовом примере у меня были данные только через строку 541. У вас будет сколько угодно строк.Замените 541 своим последним номером строки.Чтобы получить имя вируса, вы будете использовать идентификатор вируса, чтобы сопоставить лист с идентификатором вируса и именем вируса с такой формулой: = LOOKUP (C2, Вирусы! A $ 2: A $ 4, Вирусы! B $ 2: B$ 4) это предполагает, что столбец A - это идентификатор вируса, а столбец B - имя вируса, и оба они имеют однострочный заголовок.В моем примере у меня было только 3 вируса.

Когда у вас есть эти столбцы, сортируйте их по столбцу подсчета (от наибольшего к наименьшему), затем удаляйте дубликаты через Данные, удаляйте дубликаты.Снимите флажки со всех столбцов, кроме столбцов подсчета вирусов, и у вас должно быть то, что вам нужно.Если вам нужны только данные за определенный год, отфильтруйте по одному из столбцов года, прежде чем удалять дубликаты.

0 голосов
/ 01 февраля 2019

Для OpenRefine я бы сделал следующее:

  • Импортировал первый лист Excel как проект OpenRefine (называемый "project_1").Предположим, здесь есть столбцы:
    • зараженный_дат
    • healed_date
    • virus_id
  • Импортировать второй лист Excel как отдельный проект OpenRefine (называется "проект_2").Давайте предположим, что в нем есть столбцы
    • virus_id
    • virus_name
  • В созданном проекте_1 из столбца «virus_id» используйте столбец «add», основанный на этом столбцеопция '
    • Используйте GREL: forEach(cell.cross("project_2","virus_id"),r,r.cells["virus_name"].value).join("|")
    • , вызовите новый столбец "имя_вируса"
  • В проекте_1
    • создайтеТекстовый фасет в столбце вирусного имени
    • создайте «Пользовательский текстовый фасет» в столбце infect_date, используя GREL: (value.substring(0,4) == cells["healed_date"].value.substring(0,4)).toString()
  • Если вы выберете значение «true»в пользовательском текстовом фасете это отфильтрует проекты только по тем строкам, в которых год зараженного и исцеленного совпадает
  • Фасет Текст на имя_вируса даст вам число раз, когда каждое имя вируса появляется в наборе строк

Если вам нужно сделать более точное сравнение дат (например, найти зараженные и исцеленные даты, которые находятся в пределах 365 дней друг от друга), вы можете преобразовать эти значения в даты в OpenRefine и использовать GRELфункция diff чтобы найти онемениеКоличество дней (или месяцев, лет, часов и т. д.) между двумя датами

...