Извлечение элементов вложенного списка по содержанию с использованием purrr - PullRequest
0 голосов
/ 17 февраля 2019

У меня есть вложенный список, в котором каждый вложенный список имеет одинаковые элементы, но не в том же порядке, и элементы не имеют явного имени, но имеют имя в списке.

Как вы можете видеть вСтруктура списка, содержащего поле «Дата», появляется на второй позиции в первом списке и на третьей позиции во втором списке, поэтому я не могу извлечь в позиции.

Я хотел бы извлечьперечисляет, где name : равно Date, и сохраняет значение, связанное с ним, используя пакет purrr.

СТРУКТУРА

dplyr::glimpse(my_list)
List of 2
 $ :List of 10
  ..$ :List of 2
  .. ..$ name : chr "MIME-Version"
  .. ..$ value: chr "1.0"
  ..$ :List of 2
  .. ..$ name : chr "Date"
  .. ..$ value: chr "Wed, 13 Feb 2019 15:20:40 -0800"
  ..$ :List of 2
  .. ..$ name : chr "References"
  .. ..$ value: chr "<CAE1g-C7AmC3zoJRG_UgdwwkkSiJMuEuDYLU1j4ni0MZJXNrGNQ@mail.gmail.com>"
  ..$ :List of 2
  .. ..$ name : chr "In-Reply-To"
  .. ..$ value: chr "<CAE1g-C7AmC3zoJRG_UgdwwkkSiJMuEuDYLU1j4ni0MZJXNrGNQ@mail.gmail.com>"
  ..$ :List of 2
  .. ..$ name : chr "Message-ID"
  .. ..$ value: chr "<CAPApPh+WZszKg_bjQBPrS8TOvLA23hQkaa9Hocb_cgrQYs2R1w@mail.gmail.com>"
  ..$ :List of 2
  .. ..$ name : chr "Subject"
  .. ..$ value: chr "Re:"
  ..$ :List of 2
  .. ..$ name : chr "From"
  .. ..$ value: chr ""
  ..$ :List of 2
  .. ..$ name : chr "To"
  .. ..$ value: chr ""
  ..$ :List of 2
  .. ..$ name : chr "Cc"
  .. ..$ value: chr ""
  ..$ :List of 2
  .. ..$ name : chr "Content-Type"
  .. ..$ value: chr "multipart/alternative; boundary=\"000000000000f3d8810581cec99d\""
 $ :List of 7
  ..$ :List of 2
  .. ..$ name : chr "MIME-Version"
  .. ..$ value: chr "1.0"
  ..$ :List of 2
  .. ..$ name : chr "Message-ID"
  .. ..$ value: chr "<CAPApPh+THbnCg2e5WmKEwQwHEEjKDHq3V6LkYV9oL88DbHE9Pg@mail.gmail.com>"
  ..$ :List of 2
  .. ..$ name : chr "Date"
  .. ..$ value: chr "Wed, 13 Feb 2019 12:18:32 -0800"
  ..$ :List of 2
  .. ..$ name : chr "Subject"
  .. ..$ value: chr ""
  ..$ :List of 2
  .. ..$ name : chr "From"
  .. ..$ value: chr "Daniel Seneca <senecad@gene.com>"
  ..$ :List of 2
  .. ..$ name : chr "To"
  .. ..$ value: chr "Daniel Seneca <seneca.daniel@gene.com>"
  ..$ :List of 2
  .. ..$ name : chr "Content-Type"
  .. ..$ value: chr "multipart/mixed; boundary=\"000000000000f11ad10581cc3e85\""

ДАННЫЕ

my_list <-list(list(list(name = "MIME-Version", value = "1.0"), list(name = "Date", value = "Wed, 13 Feb 2019 15:20:40 -0800"), list(name = "References", value = "<CAE1g-C7AmC3zoJRG_UgdwwkkSiJMuEuDYLU1j4ni0MZJXNrGNQ@mail.gmail.com>"), list(name = "In-Reply-To", value = "<CAE1g-C7AmC3zoJRG_UgdwwkkSiJMuEuDYLU1j4ni0MZJXNrGNQ@mail.gmail.com>"),list(name = "Message-ID", value = "<CAPApPh+WZszKg_bjQBPrS8TOvLA23hQkaa9Hocb_cgrQYs2R1w@mail.gmail.com>"), list(name = "Subject", value = "Re:"), list(name = "From", value = ""),list(name = "To", value = ""),list(name = "Cc", value = ""),list(name = "Content-Type", value = "multipart/alternative; boundary=\"000000000000f3d8810581cec99d\"")),
               list(list(name = "MIME-Version", value = "1.0"), list(name = "Message-ID",value = "<CAPApPh+THbnCg2e5WmKEwQwHEEjKDHq3V6LkYV9oL88DbHE9Pg@mail.gmail.com>"),list(name = "Date",value = "Wed, 13 Feb 2019 12:18:32 -0800"), list(name = "Subject", value = ""), list(name = "From",value = "Daniel Seneca <senecad@gene.com>"), list(name = "To", value = "Daniel Seneca <seneca.daniel@gene.com>"),list(name = "Content-Type", value = "multipart/mixed; boundary=\"000000000000f11ad10581cc3e85\"")))

1 Ответ

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

Вопрос не определяет, как должен выглядеть вывод, поэтому мы предположим, что это должен быть список списков.Удалите первый слой, используя flatten, как показано, а затем отфильтруйте его элементы, используя keep.

library(purrr)
my_list %>% 
  flatten %>%
  keep(~ .x$name == "Date")

В базе R это может быть написано:

Filter(function(x) x$name == "Date", do.call("c", my_list))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...