Wolfram: транспонировать карту ассоциации - PullRequest
1 голос
/ 23 января 2020

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

В настоящее время у меня есть список ассоциаций, который выглядит следующим образом:

    assoc = 
{<|"a" -> 5, "b" -> 7, "c" -> 9, "d" -> 8|>,
 <|"a" -> 3, "b" -> 12, "c" -> 14, "d" -> 17|>,
 <|"a" -> 8, "b" -> 0, "c" -> 5, "d" -> 32|>}

И я хочу переставить каждое "b", "c", "d" с каждым "a": поэтому мой вывод будет:

{{"a" -> 5, "b" -> 7},
{"a" -> 5, "c" -> 9},
{"a" -> 5, "d" -> 8},
{"a" -> 3, "b" -> 12}, 
{"a" -> 3, "c" -> 1},
{"a" -> 3, "d" -> 17},
{"a" -> 8, "b" -> 0}, 
{"a" -> 8, "c" -> 5},
{"a" -> 8, "d" -> 32}}

Я пробовал различные методы отображения и транспонирования, но Я не могу найти ничего, что действительно работает.

Я хотел бы помочь с этим, пожалуйста!


Если вас интересует root проблемы - я у меня есть набор данных, который построен примерно так:

ds={<|"date" -> "01/06", "a" -> 140., "b" -> 868., "c" -> 450., 
"d" -> 593., "e" -> 233., "f" -> 457.,
"g" -> 105.|>,

<|"date" -> "02/06", "a" -> 139., "b" -> 836., 
"c" -> 477., "d" -> 528., "e" -> 268., "f" -> 472., 
"g" -> 119.|>,

<|"date" -> "03/06", "a" -> 117., "b" -> 820., 
"c" -> 409., "d" -> 563., "e" -> 298., "f" -> 461.,
"g" -> 116.|>}

Я пытаюсь создать DateListPlot со всеми столбцами в виде линий, а "date" - как временной ряд. Кажется, что самый простой способ создать DateListPlot - это транспонировать каждый столбец со столбцом даты:

DateListPlot[Transpose[{Normal[ds[All, "date"]] , Normal[ds[All, "a"]]}]]

Но я не могу понять, как это сделать для каждого столбца, а затем поместить все столбцы в DateListPlot в виде отдельных строк.

1 Ответ

0 голосов
/ 26 января 2020
DateListPlot[Transpose[{DateList[{#,
         {"Month", "YearShort"}}] & /@
      Map[Key["date"], ds], #}] & /@
  (Map[Key[#], ds] & /@
    {"a", "b", "c", "d", "e", "f", "g"})]

или

DateListPlot[Transpose[{DateList[{#,
         {"Month", "YearShort"}}] & /@
      Map[Key["date"], ds], #}] & /@
  Transpose@Values@ds[[All,
      {"a", "b", "c", "d", "e", "f", "g"}]]]
...