Списки Mathematica - Поиск второго уровня и возврат первого уровня? - PullRequest
1 голос
/ 09 июля 2011

Мне нужно сопоставить строки на втором уровне списка, но на первом уровне возвращаются истинные случаи (на первом уровне есть информация, которая мне нужна для классификации возвращаемых данных).Команда GatherBy сверху просто организует все записи по дате, поэтому я не получаю дубликатов.Затем я запрашиваю случаи в диагностической таблице, в которых есть термины, соответствующие строке «ФИЗИЧЕСКАЯ ЭКСПЕРТИЗА».

Я должен искать только второй уровень списков.Если я ищу только первый, я не возвращаю все истинные случаи.При поиске первого и второго я получаю дубликаты (в некоторых случаях требуемая строка указывается как на первом, так и на втором уровнях, поэтому первый и второй уровни списка возвращаются отдельно).

Мне нужно найти строку на втором уровне и затем вернуть ТОЛЬКО первый уровень списков, которые соответствуют этому второму уровню.Мне не нужно исключать второй уровень, я просто не хочу, чтобы он возвращался отдельно, как если бы я искал уровни один и два.

Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

3 голосов
/ 09 июля 2011

Может как то так?

list = {{a, b, c, {x, y}, d, x}, {a, b, c, d, x}, {{a, b, c, d}, x}}

Select[list, MemberQ[#, x, {2}] &]

Выход:

{{a, b, c, {x, y}, d, x}}

Обновление

Это также будет работать

Cases[list, _?(MemberQ[#, x, {2}] &)]

Обновление вопроса @rose (см. Комментарии)

Учитывая следующие данные, как я могу выбрать записи, содержащие слова «ФИЗИЧЕСКИЙ ЭКСПЕРТИЗЫ» в строке, например, внутри строки «ФИЗИЧЕСКИЙ ЭКСПЕРТИЗЫ P-023, ТЕХНИК, NOS», на втором уровне (т.е. только в пределах подсписок)? (Я немного изменил пример @ rose)

rdata2={{1111113,21119,SQLDateTime[{2011,1,11,11,11,0.`}],31111,"EB/JW",1,47000,"T-510 CHEEK",{"T-510 CHEEK","No Examination, NOS"},"Text bla bla bla physical examination bla bla"},{1111114,21119,SQLDateTime[{2011,2,11,11,11,0.`}],31112,"EB/JW",1,47000,"T-510 CHEEK",{"T-510 CHEEK","P-023 PHYSICAL EXAMINATION, TECHNICIAN, NOS"},"Text bla bla bla"},
{1111115,21000,SQLDateTime[{2011,1,11,11,11,0.`}],31111,"EB/JW",1,47000,"T-510 CHEEK",{"T-510 CHEEK","P-023 physical examination, TECHNICIAN, NOS"},"Text bla bla bla physical examination bla bla"}};

(1) В одну сторону (возврат только записи 1111114)

Select[rdata2, 
 MemberQ[Characters@#, 
   Flatten@{___, Characters["PHYSICAL EXAMINATION"], ___}, {2}] &]

(2) Игнорировать регистр (но все еще выбирать в подсписке)

Select[rdata2,MemberQ[ToLowerCase@Characters@#,
Flatten@{___,ToLowerCase@
Characters["PHYSICAL EXAMINATION"],___},{2}]&]

(выбирается для записей 1111114 и 1111115)

(3) Последний пример (выберите для записей с «Без проверки» в подсписке, но там, где может быть ноль или более символов между «Нет» и «Проверка», и где регистр снова игнорируется) )

Select[rdata2, 
 MemberQ[ToLowerCase@Characters@#, 
   Flatten@Riffle[
     ToLowerCase@Characters@{"No", "Examination"}, ___, {1, -1, 
      2}], {2}] &]

(выбирается для записи 1111113)

Нет никаких сомнений, что есть более эффективные способы продолжения. Я надеюсь, что правильно истолковал вопрос.

0 голосов
/ 18 августа 2011

Если я понимаю ваши требования, вы можете рассмотреть:

dat = {{1111113, 21119, SQLDateTime[{2011, 1, 11, 11, 11, 0.`}], 
    31111, "EB/JW", 1, 47000, 
    "T-510 CHEEK", {"T-510 CHEEK", "No Examination, NOS"}, 
    "Text bla bla bla physical examination bla bla"}, {1111114, 21119,
     SQLDateTime[{2011, 2, 11, 11, 11, 0.`}], 31112, "EB/JW", 1, 
    47000, "T-510 CHEEK", {"T-510 CHEEK", 
     "P-023 PHYSICAL EXAMINATION, TECHNICIAN, NOS"}, 
    "Text bla bla bla"}, {1111115, 21000, 
    SQLDateTime[{2011, 1, 11, 11, 11, 0.`}], 31111, "EB/JW", 1, 47000,
     "T-510 CHEEK", {"T-510 CHEEK", 
     "P-023 physical examination, TECHNICIAN, NOS"}, 
    "Text bla bla bla physical examination bla bla"}};

p = 
 Position[ dat,
   _String?(StringMatchQ[#, "*PHYSICAL EXAMINATION*", IgnoreCase -> True] &),
   {2, 3}
 ];

dat[[ Union[First /@ p] ]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...