1
$\begingroup$

I have a list of lists. There are large number of elements in the list (I am showing here just a minimal example). I want to extract elements $d$ and $e$ from the data. So, I have to count at what position $d$ and $e$ are.

Is there any efficient way to do this without counting positions of elements manually? Can we label these elements and use those labels instead of using their positions?

a = RandomReal[{1, 100}, 10];
b = RandomReal[{1, 100}, 10];
c = RandomReal[{1, 100}, 10];
d = RandomReal[{1, 100}, 10];
e = RandomReal[{1, 100}, 10];
f = RandomReal[{1, 100}, 10];
data = Table[{a[[i]], b[[i]], c[[i]], d[[i]], e[[i]], f[[i]]}, {i, 1, 10}];
data1 = data[[All, {5, 6}]];
$\endgroup$
  • 1
    $\begingroup$ Lookup Transpose. It allows a more compact treatment: data = Transpose @ { a, b, c, d, e, f }; is equivalent to your procedural Table statement. $\endgroup$ – gwr Apr 9 '17 at 10:35
  • 1
    $\begingroup$ It would be really nice, if you could maybe say why the answer given is not acceptable. Thank your very much for the effort. :) $\endgroup$ – gwr Apr 17 '17 at 17:31
6
$\begingroup$

Make use of Association or Dataset:

data = Query[Transpose] @ AssociationThread[
    CharacterRange["a", "f"] -> {a, b, c, d, e, f}
];

data // Dataset

Dataset presentation of labeled data

Edit

In case you wonder: Using Transpose on the Association created by AssociationThread will not work directly. Nesting the Transpose in Query will make use of AssociationTranspose which is contained in the GeneralUtilities package:

Query[ Transpose ] // Normal

GeneralUtilities`AssociationTranspose

| improve this answer | |
$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.