How to select certain elements from a list?












1















If I have list like this:



 list_data <- list(c("Red", "Green","red"), 
c(21,32,11,2,3,6,5,4),
c(1,2,5,4,TRUE, 51.23, 119.1))


I want to keep the last 2 elements before the last one from the list:
desired output:



  > list_data
[[1]]
[1] "Red" "Green"

[[2]]
[1] 6 5

[[3]]
[1] 1.00 51.23


Any idea on this?










share|improve this question





























    1















    If I have list like this:



     list_data <- list(c("Red", "Green","red"), 
    c(21,32,11,2,3,6,5,4),
    c(1,2,5,4,TRUE, 51.23, 119.1))


    I want to keep the last 2 elements before the last one from the list:
    desired output:



      > list_data
    [[1]]
    [1] "Red" "Green"

    [[2]]
    [1] 6 5

    [[3]]
    [1] 1.00 51.23


    Any idea on this?










    share|improve this question



























      1












      1








      1


      1






      If I have list like this:



       list_data <- list(c("Red", "Green","red"), 
      c(21,32,11,2,3,6,5,4),
      c(1,2,5,4,TRUE, 51.23, 119.1))


      I want to keep the last 2 elements before the last one from the list:
      desired output:



        > list_data
      [[1]]
      [1] "Red" "Green"

      [[2]]
      [1] 6 5

      [[3]]
      [1] 1.00 51.23


      Any idea on this?










      share|improve this question
















      If I have list like this:



       list_data <- list(c("Red", "Green","red"), 
      c(21,32,11,2,3,6,5,4),
      c(1,2,5,4,TRUE, 51.23, 119.1))


      I want to keep the last 2 elements before the last one from the list:
      desired output:



        > list_data
      [[1]]
      [1] "Red" "Green"

      [[2]]
      [1] 6 5

      [[3]]
      [1] 1.00 51.23


      Any idea on this?







      r






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 20 '18 at 10:35









      Sotos

      29k51640




      29k51640










      asked Nov 20 '18 at 10:24









      bic tonbic ton

      343129




      343129
























          3 Answers
          3






          active

          oldest

          votes


















          2














          Another option using tail, i.e.



          lapply(list_data, function(i)tail(i, 3)[-3])
          #[[1]]
          #[1] "Red" "Green"

          #[[2]]
          #[1] 6 5

          #[[3]]
          #[1] 1.00 51.23





          share|improve this answer































            2














            You could do



            lapply(list_data, function(x) x[(length(x) - 2:1)])
            #[[1]]
            #[1] "Red" "Green"

            #[[2]]
            #[1] 6 5

            #[[3]]
            #[1] 1.00 51.23





            share|improve this answer































              1














              Solution with Map (thanks to @Sotos for tail):



              Map(function(x)tail(x, 3)[-3],list_data) 
              # [[1]]
              # [1] "Red" "Green"
              #
              # [[2]]
              # [1] 6 5
              #
              # [[3]]
              # [1] 1.00 51.23


              If you name each element, you could get a data.frame by using purrr:



              names(list_data) <- letters[1:3]
              purrr::map_df(list_data, function(x) x[length(x)-2:1]) # ~ .x[length(.x)-(2:1)]

              # # A tibble: 2 x 3
              # a b c
              # <chr> <dbl> <dbl>
              # 1 Red 6 1
              # 2 Green 5 51.2





              share|improve this answer























                Your Answer






                StackExchange.ifUsing("editor", function () {
                StackExchange.using("externalEditor", function () {
                StackExchange.using("snippets", function () {
                StackExchange.snippets.init();
                });
                });
                }, "code-snippets");

                StackExchange.ready(function() {
                var channelOptions = {
                tags: "".split(" "),
                id: "1"
                };
                initTagRenderer("".split(" "), "".split(" "), channelOptions);

                StackExchange.using("externalEditor", function() {
                // Have to fire editor after snippets, if snippets enabled
                if (StackExchange.settings.snippets.snippetsEnabled) {
                StackExchange.using("snippets", function() {
                createEditor();
                });
                }
                else {
                createEditor();
                }
                });

                function createEditor() {
                StackExchange.prepareEditor({
                heartbeatType: 'answer',
                autoActivateHeartbeat: false,
                convertImagesToLinks: true,
                noModals: true,
                showLowRepImageUploadWarning: true,
                reputationToPostImages: 10,
                bindNavPrevention: true,
                postfix: "",
                imageUploader: {
                brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
                contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
                allowUrls: true
                },
                onDemand: true,
                discardSelector: ".discard-answer"
                ,immediatelyShowMarkdownHelp:true
                });


                }
                });














                draft saved

                draft discarded


















                StackExchange.ready(
                function () {
                StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53390906%2fhow-to-select-certain-elements-from-a-list%23new-answer', 'question_page');
                }
                );

                Post as a guest















                Required, but never shown

























                3 Answers
                3






                active

                oldest

                votes








                3 Answers
                3






                active

                oldest

                votes









                active

                oldest

                votes






                active

                oldest

                votes









                2














                Another option using tail, i.e.



                lapply(list_data, function(i)tail(i, 3)[-3])
                #[[1]]
                #[1] "Red" "Green"

                #[[2]]
                #[1] 6 5

                #[[3]]
                #[1] 1.00 51.23





                share|improve this answer




























                  2














                  Another option using tail, i.e.



                  lapply(list_data, function(i)tail(i, 3)[-3])
                  #[[1]]
                  #[1] "Red" "Green"

                  #[[2]]
                  #[1] 6 5

                  #[[3]]
                  #[1] 1.00 51.23





                  share|improve this answer


























                    2












                    2








                    2







                    Another option using tail, i.e.



                    lapply(list_data, function(i)tail(i, 3)[-3])
                    #[[1]]
                    #[1] "Red" "Green"

                    #[[2]]
                    #[1] 6 5

                    #[[3]]
                    #[1] 1.00 51.23





                    share|improve this answer













                    Another option using tail, i.e.



                    lapply(list_data, function(i)tail(i, 3)[-3])
                    #[[1]]
                    #[1] "Red" "Green"

                    #[[2]]
                    #[1] 6 5

                    #[[3]]
                    #[1] 1.00 51.23






                    share|improve this answer












                    share|improve this answer



                    share|improve this answer










                    answered Nov 20 '18 at 10:34









                    SotosSotos

                    29k51640




                    29k51640

























                        2














                        You could do



                        lapply(list_data, function(x) x[(length(x) - 2:1)])
                        #[[1]]
                        #[1] "Red" "Green"

                        #[[2]]
                        #[1] 6 5

                        #[[3]]
                        #[1] 1.00 51.23





                        share|improve this answer




























                          2














                          You could do



                          lapply(list_data, function(x) x[(length(x) - 2:1)])
                          #[[1]]
                          #[1] "Red" "Green"

                          #[[2]]
                          #[1] 6 5

                          #[[3]]
                          #[1] 1.00 51.23





                          share|improve this answer


























                            2












                            2








                            2







                            You could do



                            lapply(list_data, function(x) x[(length(x) - 2:1)])
                            #[[1]]
                            #[1] "Red" "Green"

                            #[[2]]
                            #[1] 6 5

                            #[[3]]
                            #[1] 1.00 51.23





                            share|improve this answer













                            You could do



                            lapply(list_data, function(x) x[(length(x) - 2:1)])
                            #[[1]]
                            #[1] "Red" "Green"

                            #[[2]]
                            #[1] 6 5

                            #[[3]]
                            #[1] 1.00 51.23






                            share|improve this answer












                            share|improve this answer



                            share|improve this answer










                            answered Nov 20 '18 at 10:29









                            markusmarkus

                            11.1k1031




                            11.1k1031























                                1














                                Solution with Map (thanks to @Sotos for tail):



                                Map(function(x)tail(x, 3)[-3],list_data) 
                                # [[1]]
                                # [1] "Red" "Green"
                                #
                                # [[2]]
                                # [1] 6 5
                                #
                                # [[3]]
                                # [1] 1.00 51.23


                                If you name each element, you could get a data.frame by using purrr:



                                names(list_data) <- letters[1:3]
                                purrr::map_df(list_data, function(x) x[length(x)-2:1]) # ~ .x[length(.x)-(2:1)]

                                # # A tibble: 2 x 3
                                # a b c
                                # <chr> <dbl> <dbl>
                                # 1 Red 6 1
                                # 2 Green 5 51.2





                                share|improve this answer




























                                  1














                                  Solution with Map (thanks to @Sotos for tail):



                                  Map(function(x)tail(x, 3)[-3],list_data) 
                                  # [[1]]
                                  # [1] "Red" "Green"
                                  #
                                  # [[2]]
                                  # [1] 6 5
                                  #
                                  # [[3]]
                                  # [1] 1.00 51.23


                                  If you name each element, you could get a data.frame by using purrr:



                                  names(list_data) <- letters[1:3]
                                  purrr::map_df(list_data, function(x) x[length(x)-2:1]) # ~ .x[length(.x)-(2:1)]

                                  # # A tibble: 2 x 3
                                  # a b c
                                  # <chr> <dbl> <dbl>
                                  # 1 Red 6 1
                                  # 2 Green 5 51.2





                                  share|improve this answer


























                                    1












                                    1








                                    1







                                    Solution with Map (thanks to @Sotos for tail):



                                    Map(function(x)tail(x, 3)[-3],list_data) 
                                    # [[1]]
                                    # [1] "Red" "Green"
                                    #
                                    # [[2]]
                                    # [1] 6 5
                                    #
                                    # [[3]]
                                    # [1] 1.00 51.23


                                    If you name each element, you could get a data.frame by using purrr:



                                    names(list_data) <- letters[1:3]
                                    purrr::map_df(list_data, function(x) x[length(x)-2:1]) # ~ .x[length(.x)-(2:1)]

                                    # # A tibble: 2 x 3
                                    # a b c
                                    # <chr> <dbl> <dbl>
                                    # 1 Red 6 1
                                    # 2 Green 5 51.2





                                    share|improve this answer













                                    Solution with Map (thanks to @Sotos for tail):



                                    Map(function(x)tail(x, 3)[-3],list_data) 
                                    # [[1]]
                                    # [1] "Red" "Green"
                                    #
                                    # [[2]]
                                    # [1] 6 5
                                    #
                                    # [[3]]
                                    # [1] 1.00 51.23


                                    If you name each element, you could get a data.frame by using purrr:



                                    names(list_data) <- letters[1:3]
                                    purrr::map_df(list_data, function(x) x[length(x)-2:1]) # ~ .x[length(.x)-(2:1)]

                                    # # A tibble: 2 x 3
                                    # a b c
                                    # <chr> <dbl> <dbl>
                                    # 1 Red 6 1
                                    # 2 Green 5 51.2






                                    share|improve this answer












                                    share|improve this answer



                                    share|improve this answer










                                    answered Nov 20 '18 at 10:37









                                    RLaveRLave

                                    3,9951922




                                    3,9951922






























                                        draft saved

                                        draft discarded




















































                                        Thanks for contributing an answer to Stack Overflow!


                                        • Please be sure to answer the question. Provide details and share your research!

                                        But avoid



                                        • Asking for help, clarification, or responding to other answers.

                                        • Making statements based on opinion; back them up with references or personal experience.


                                        To learn more, see our tips on writing great answers.




                                        draft saved


                                        draft discarded














                                        StackExchange.ready(
                                        function () {
                                        StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53390906%2fhow-to-select-certain-elements-from-a-list%23new-answer', 'question_page');
                                        }
                                        );

                                        Post as a guest















                                        Required, but never shown





















































                                        Required, but never shown














                                        Required, but never shown












                                        Required, but never shown







                                        Required, but never shown

































                                        Required, but never shown














                                        Required, but never shown












                                        Required, but never shown







                                        Required, but never shown







                                        Popular posts from this blog

                                        Can a sorcerer learn a 5th-level spell early by creating spell slots using the Font of Magic feature?

                                        Does disintegrating a polymorphed enemy still kill it after the 2018 errata?

                                        A Topological Invariant for $pi_3(U(n))$