3
$\begingroup$

This code:

data = {
<|"links" -> "one", "tags" -> {"A", "B", "C"}|>,
<|"links" -> "two", "tags" -> {"D", "B"}|>
      };

expandedData = 
  Flatten[Table[<|"tags" -> tags, "links" -> entry["links"]|>, {entry,
  data}, {tags, entry["tags"]}], 1];

Grid[Prepend[Values /@ expandedData, {"tags", "links"}], Frame -> All]

generates:

enter image description here

What changes are to be made in:

data = {{"one", {"A", "B", "C"}}, {"two", {"D", "B"}}};
ds = Query[All, {"number" -> All}]@
Dataset[AssociationThread[{"number", "letters"} -> #] & /@ data]

to produce the following table:

enter image description here

$\endgroup$

3 Answers 3

2
$\begingroup$

Given

data = {{"one", {"A", "B", "C"}}, {"two", {"D", "B"}}};
ds = Query[All, {"number" -> All}]@
  Dataset[AssociationThread[{"number", "letters"} -> #] & /@ data];
ds // Normal

(*
   {<|"number" -> "one", "letters" -> {"A", "B", "C"}|>
  , <|"number" -> "two", "letters" -> {"D", "B"}|>}
*)

we can expand over letters

expand = ds[
Query[All, row |-> 
  Map[<|"number" -> row["number"], "letters" -> #|> &, row["letters"]]
 ]][Flatten]
expand // Normal

(*
{ <|"number" -> "one" , "letters" -> "A"|>
, <|"number" -> "one" , "letters" -> "B"|>
, <|"number" -> "one" , "letters" -> "C"|>
, <|"number" -> "two" , "letters" -> "D"|>
, <|"number" -> "two" , "letters" -> "B"|>}
*)
$\endgroup$
3
$\begingroup$
data = {{"one", {"A", "B", "C"}}, {"two", {"D", "B"}}};
Grid[Join@@Map[Function[{x},{#,x[[1]]}&/@x[[2]]],data],Frame->All]

table

$\endgroup$
2
$\begingroup$
data = {{"one", {"A", "B", "C"}}, {"two", {"D", "B"}}};

As a Dataset, it can be:

Dataset[Apply[Association@*Rule, Map[Thread@*Reverse]@data, {2}]]

dataset

Or using Grid:

Grid[Catenate[Map[Thread@*Reverse]@data], Frame -> All]

table

$\endgroup$

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.