How to label a integer column based on a conditional statement in R












0















I want to label this vector C into either [1] HY HY HY HY LY HY (2 levels) or vice versa [1] LY LY LY LY HY LY (2 levels) based on a condition I specified using factor.



For example,



C <- c(1, 1, 1, 1, 2, 1)

ifelse(50 > 100,
factor(C, labels = c('HY','LY')),
factor(C, labels = c('LY','HY')))


This prints out [1] 1 rather than my expectation.



But factor(C, labels = c('LY','HY')) works fine. Why is that?



Then I did a test by taking out factor, but it still doesn't give me 'LY' 'HY'.



ifelse(50 > 100,
c('HY','LY'),
c('LY','HY'))
[1] "LY"


Another option I can think of is to change the vector into characters like this and then change it to factor. In either case, it should give me a vector, not a value.



ifelse(50 > 100,
ifelse(C==1, 'HY', 'LY'),
ifelse(C==1, 'LY', 'HY'))
[1] "LY"









share|improve this question





























    0















    I want to label this vector C into either [1] HY HY HY HY LY HY (2 levels) or vice versa [1] LY LY LY LY HY LY (2 levels) based on a condition I specified using factor.



    For example,



    C <- c(1, 1, 1, 1, 2, 1)

    ifelse(50 > 100,
    factor(C, labels = c('HY','LY')),
    factor(C, labels = c('LY','HY')))


    This prints out [1] 1 rather than my expectation.



    But factor(C, labels = c('LY','HY')) works fine. Why is that?



    Then I did a test by taking out factor, but it still doesn't give me 'LY' 'HY'.



    ifelse(50 > 100,
    c('HY','LY'),
    c('LY','HY'))
    [1] "LY"


    Another option I can think of is to change the vector into characters like this and then change it to factor. In either case, it should give me a vector, not a value.



    ifelse(50 > 100,
    ifelse(C==1, 'HY', 'LY'),
    ifelse(C==1, 'LY', 'HY'))
    [1] "LY"









    share|improve this question



























      0












      0








      0








      I want to label this vector C into either [1] HY HY HY HY LY HY (2 levels) or vice versa [1] LY LY LY LY HY LY (2 levels) based on a condition I specified using factor.



      For example,



      C <- c(1, 1, 1, 1, 2, 1)

      ifelse(50 > 100,
      factor(C, labels = c('HY','LY')),
      factor(C, labels = c('LY','HY')))


      This prints out [1] 1 rather than my expectation.



      But factor(C, labels = c('LY','HY')) works fine. Why is that?



      Then I did a test by taking out factor, but it still doesn't give me 'LY' 'HY'.



      ifelse(50 > 100,
      c('HY','LY'),
      c('LY','HY'))
      [1] "LY"


      Another option I can think of is to change the vector into characters like this and then change it to factor. In either case, it should give me a vector, not a value.



      ifelse(50 > 100,
      ifelse(C==1, 'HY', 'LY'),
      ifelse(C==1, 'LY', 'HY'))
      [1] "LY"









      share|improve this question
















      I want to label this vector C into either [1] HY HY HY HY LY HY (2 levels) or vice versa [1] LY LY LY LY HY LY (2 levels) based on a condition I specified using factor.



      For example,



      C <- c(1, 1, 1, 1, 2, 1)

      ifelse(50 > 100,
      factor(C, labels = c('HY','LY')),
      factor(C, labels = c('LY','HY')))


      This prints out [1] 1 rather than my expectation.



      But factor(C, labels = c('LY','HY')) works fine. Why is that?



      Then I did a test by taking out factor, but it still doesn't give me 'LY' 'HY'.



      ifelse(50 > 100,
      c('HY','LY'),
      c('LY','HY'))
      [1] "LY"


      Another option I can think of is to change the vector into characters like this and then change it to factor. In either case, it should give me a vector, not a value.



      ifelse(50 > 100,
      ifelse(C==1, 'HY', 'LY'),
      ifelse(C==1, 'LY', 'HY'))
      [1] "LY"






      if-statement label






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 15 '18 at 4:41







      Golden Jiang

















      asked Nov 15 '18 at 3:16









      Golden JiangGolden Jiang

      4819




      4819
























          1 Answer
          1






          active

          oldest

          votes


















          0














          So it turns out ifelse is like a for loop that accepts a vector input and prints out a vector of the same length, i.e. 50>100 prints out FALSE of the length 1 and so as the output.



          When I use if instead of ifelse, the problem solved.



          if(50>100){
          ifelse(C==1, 'HY', 'LY')
          } else {
          ifelse(C==1, 'LY', 'HY')
          }

          [1] "LY" "LY" "LY" "LY" "HY" "LY"





          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%2f53311893%2fhow-to-label-a-integer-column-based-on-a-conditional-statement-in-r%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            0














            So it turns out ifelse is like a for loop that accepts a vector input and prints out a vector of the same length, i.e. 50>100 prints out FALSE of the length 1 and so as the output.



            When I use if instead of ifelse, the problem solved.



            if(50>100){
            ifelse(C==1, 'HY', 'LY')
            } else {
            ifelse(C==1, 'LY', 'HY')
            }

            [1] "LY" "LY" "LY" "LY" "HY" "LY"





            share|improve this answer




























              0














              So it turns out ifelse is like a for loop that accepts a vector input and prints out a vector of the same length, i.e. 50>100 prints out FALSE of the length 1 and so as the output.



              When I use if instead of ifelse, the problem solved.



              if(50>100){
              ifelse(C==1, 'HY', 'LY')
              } else {
              ifelse(C==1, 'LY', 'HY')
              }

              [1] "LY" "LY" "LY" "LY" "HY" "LY"





              share|improve this answer


























                0












                0








                0







                So it turns out ifelse is like a for loop that accepts a vector input and prints out a vector of the same length, i.e. 50>100 prints out FALSE of the length 1 and so as the output.



                When I use if instead of ifelse, the problem solved.



                if(50>100){
                ifelse(C==1, 'HY', 'LY')
                } else {
                ifelse(C==1, 'LY', 'HY')
                }

                [1] "LY" "LY" "LY" "LY" "HY" "LY"





                share|improve this answer













                So it turns out ifelse is like a for loop that accepts a vector input and prints out a vector of the same length, i.e. 50>100 prints out FALSE of the length 1 and so as the output.



                When I use if instead of ifelse, the problem solved.



                if(50>100){
                ifelse(C==1, 'HY', 'LY')
                } else {
                ifelse(C==1, 'LY', 'HY')
                }

                [1] "LY" "LY" "LY" "LY" "HY" "LY"






                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 16 '18 at 4:41









                Golden JiangGolden Jiang

                4819




                4819
































                    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%2f53311893%2fhow-to-label-a-integer-column-based-on-a-conditional-statement-in-r%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

                    Florida Star v. B. J. F.

                    Error while running script in elastic search , gateway timeout

                    Adding quotations to stringified JSON object values