R Combine Multiple Rows of DataFrame by creating new columns and union values2019 Community Moderator ElectionData scheduling for recommenderLooking for smallest set of rows that form a natural key in a data setCreating new columns by iterating over rows in pandas dataframeWhat tools are available for semi-automated matching of dirty columnar dataTechnical name for this data wrangling process? Multiple columns into multi-factor single columnReplacing values in multiple columns of a data frame in RQ-learning with a state-action-state reward structure and a Q-matrix with states as rows and actions as columnsR Programming rearranging rows and colums from timeline dataHow do I add a column to a Pandas dataframe based on other rows and columns in the dataframe?Inputting (a lot of )data into a dataframe one row at a time

What is the intuition behind short exact sequences of groups; in particular, what is the intuition behind group extensions?

What reasons are there for a Capitalist to oppose a 100% inheritance tax?

Is it canonical bit space?

What to put in ESTA if staying in US for a few days before going on to Canada

How can I prevent hyper evolved versions of regular creatures from wiping out their cousins?

Python: return float 1.0 as int 1 but float 1.5 as float 1.5

Does casting Light, or a similar spell, have any effect when the caster is swallowed by a monster?

Doing something right before you need it - expression for this?

How do I find out when a node was added to an availability group?

Has there ever been an airliner design involving reducing generator load by installing solar panels?

Why does Optional.map make this assignment work?

Why "Having chlorophyll without photosynthesis is actually very dangerous" and "like living with a bomb"?

How could indestructible materials be used in power generation?

Brothers & sisters

Cronab fails because shell path not found

I'm flying to France today and my passport expires in less than 2 months

What's the point of deactivating Num Lock on login screens?

UK: Is there precedent for the governments e-petition site changing the direction of a government decision?

Why is the ratio of two extensive quantities always intensive?

What does it mean to describe someone as a butt steak?

Increase size of symbol intercal when in superscript position

How to say in German "enjoying home comforts"

What exploit are these user agents trying to use?

Can I make "comment-region" comment empty lines?



R Combine Multiple Rows of DataFrame by creating new columns and union values



2019 Community Moderator ElectionData scheduling for recommenderLooking for smallest set of rows that form a natural key in a data setCreating new columns by iterating over rows in pandas dataframeWhat tools are available for semi-automated matching of dirty columnar dataTechnical name for this data wrangling process? Multiple columns into multi-factor single columnReplacing values in multiple columns of a data frame in RQ-learning with a state-action-state reward structure and a Q-matrix with states as rows and actions as columnsR Programming rearranging rows and colums from timeline dataHow do I add a column to a Pandas dataframe based on other rows and columns in the dataframe?Inputting (a lot of )data into a dataframe one row at a time










1












$begingroup$


I have a dataframe in R that looks like this



 ID APPROVAL_STEP APPROVAL_STATUS APPROVAL_DATE APPROVER
1234 STEP_A APPROVED 23-Jan-2019 John Smith
1234 STEP_B APPROVED 21-Jan-2019 Jane Doe


I need it to look like this



 ID STEP_A_STATUS STEP_A_APPROVAL_DATE STEP_A_APPROVER STEP_B_STATUS STEP_B_APPROVAL_DATE STEP_B_APPROVER
1234 APPROVED 23-Jan-2019 John Smith APPROVED 21-Jan-2019 Jane Doe


And of course, with the original dataframe, any of APPROVAL_STATUS, APPROVAL_DATE, or APPROVER can be NA.



What is the most elegant way to do this? I know how to do it by looping through the unique IDs, grabbing each row, creating new columns, etc.; but is there any way to do this in a more elegant way (e.g., using tidyverse)?










share|improve this question









$endgroup$











  • $begingroup$
    Does every ID appear exactly n times, once for each Step?
    $endgroup$
    – Ben Reiniger
    Mar 20 at 1:45















1












$begingroup$


I have a dataframe in R that looks like this



 ID APPROVAL_STEP APPROVAL_STATUS APPROVAL_DATE APPROVER
1234 STEP_A APPROVED 23-Jan-2019 John Smith
1234 STEP_B APPROVED 21-Jan-2019 Jane Doe


I need it to look like this



 ID STEP_A_STATUS STEP_A_APPROVAL_DATE STEP_A_APPROVER STEP_B_STATUS STEP_B_APPROVAL_DATE STEP_B_APPROVER
1234 APPROVED 23-Jan-2019 John Smith APPROVED 21-Jan-2019 Jane Doe


And of course, with the original dataframe, any of APPROVAL_STATUS, APPROVAL_DATE, or APPROVER can be NA.



What is the most elegant way to do this? I know how to do it by looping through the unique IDs, grabbing each row, creating new columns, etc.; but is there any way to do this in a more elegant way (e.g., using tidyverse)?










share|improve this question









$endgroup$











  • $begingroup$
    Does every ID appear exactly n times, once for each Step?
    $endgroup$
    – Ben Reiniger
    Mar 20 at 1:45













1












1








1


1



$begingroup$


I have a dataframe in R that looks like this



 ID APPROVAL_STEP APPROVAL_STATUS APPROVAL_DATE APPROVER
1234 STEP_A APPROVED 23-Jan-2019 John Smith
1234 STEP_B APPROVED 21-Jan-2019 Jane Doe


I need it to look like this



 ID STEP_A_STATUS STEP_A_APPROVAL_DATE STEP_A_APPROVER STEP_B_STATUS STEP_B_APPROVAL_DATE STEP_B_APPROVER
1234 APPROVED 23-Jan-2019 John Smith APPROVED 21-Jan-2019 Jane Doe


And of course, with the original dataframe, any of APPROVAL_STATUS, APPROVAL_DATE, or APPROVER can be NA.



What is the most elegant way to do this? I know how to do it by looping through the unique IDs, grabbing each row, creating new columns, etc.; but is there any way to do this in a more elegant way (e.g., using tidyverse)?










share|improve this question









$endgroup$




I have a dataframe in R that looks like this



 ID APPROVAL_STEP APPROVAL_STATUS APPROVAL_DATE APPROVER
1234 STEP_A APPROVED 23-Jan-2019 John Smith
1234 STEP_B APPROVED 21-Jan-2019 Jane Doe


I need it to look like this



 ID STEP_A_STATUS STEP_A_APPROVAL_DATE STEP_A_APPROVER STEP_B_STATUS STEP_B_APPROVAL_DATE STEP_B_APPROVER
1234 APPROVED 23-Jan-2019 John Smith APPROVED 21-Jan-2019 Jane Doe


And of course, with the original dataframe, any of APPROVAL_STATUS, APPROVAL_DATE, or APPROVER can be NA.



What is the most elegant way to do this? I know how to do it by looping through the unique IDs, grabbing each row, creating new columns, etc.; but is there any way to do this in a more elegant way (e.g., using tidyverse)?







r data-cleaning data-wrangling






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Mar 12 at 17:36







user69420


















  • $begingroup$
    Does every ID appear exactly n times, once for each Step?
    $endgroup$
    – Ben Reiniger
    Mar 20 at 1:45
















  • $begingroup$
    Does every ID appear exactly n times, once for each Step?
    $endgroup$
    – Ben Reiniger
    Mar 20 at 1:45















$begingroup$
Does every ID appear exactly n times, once for each Step?
$endgroup$
– Ben Reiniger
Mar 20 at 1:45




$begingroup$
Does every ID appear exactly n times, once for each Step?
$endgroup$
– Ben Reiniger
Mar 20 at 1:45










1 Answer
1






active

oldest

votes


















0












$begingroup$

What you are asking is how to convert data from "long" form to "wide" form.



You can just use the reshape() function which is in the stats package.



#' I constructed your data frame here
x<-data.frame(ID=c(1234,1234),
APPROVAL_STEP=c("STEP_A","STEP_B"),
APPROVAL_STATUS=c("APPROVED","APPROVED"),
APPROVAL_DATE=c("23-Jan-2019","21-Jan-2019"),
APPROVER=c("John Smith","Jane Doe"))




#' Now to reshape the data

library(stats)
reshape(x,
timevar="APPROVAL_STEP",
idvar="ID",
sep="_", direction = "wide")


Your output should look like.



 ID APPROVAL_STATUS_STEP_A APPROVAL_DATE_STEP_A APPROVER_STEP_A APPROVAL_STATUS_STEP_B APPROVAL_DATE_STEP_B
1 1234 APPROVED 23-Jan-2019 John Smith APPROVED 21-Jan-2019
APPROVER_STEP_B
1 Jane Doe


The column names is a cosmetic issue, but that's the gist of it.



Hope this is helpful!






share|improve this answer








New contributor




I'mAnAccountantIKnowAlotOfMath is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






$endgroup$













    Your Answer





    StackExchange.ifUsing("editor", function ()
    return StackExchange.using("mathjaxEditing", function ()
    StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix)
    StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["$", "$"], ["\\(","\\)"]]);
    );
    );
    , "mathjax-editing");

    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "557"
    ;
    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: false,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: null,
    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%2fdatascience.stackexchange.com%2fquestions%2f47175%2fr-combine-multiple-rows-of-dataframe-by-creating-new-columns-and-union-values%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












    $begingroup$

    What you are asking is how to convert data from "long" form to "wide" form.



    You can just use the reshape() function which is in the stats package.



    #' I constructed your data frame here
    x<-data.frame(ID=c(1234,1234),
    APPROVAL_STEP=c("STEP_A","STEP_B"),
    APPROVAL_STATUS=c("APPROVED","APPROVED"),
    APPROVAL_DATE=c("23-Jan-2019","21-Jan-2019"),
    APPROVER=c("John Smith","Jane Doe"))




    #' Now to reshape the data

    library(stats)
    reshape(x,
    timevar="APPROVAL_STEP",
    idvar="ID",
    sep="_", direction = "wide")


    Your output should look like.



     ID APPROVAL_STATUS_STEP_A APPROVAL_DATE_STEP_A APPROVER_STEP_A APPROVAL_STATUS_STEP_B APPROVAL_DATE_STEP_B
    1 1234 APPROVED 23-Jan-2019 John Smith APPROVED 21-Jan-2019
    APPROVER_STEP_B
    1 Jane Doe


    The column names is a cosmetic issue, but that's the gist of it.



    Hope this is helpful!






    share|improve this answer








    New contributor




    I'mAnAccountantIKnowAlotOfMath is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
    Check out our Code of Conduct.






    $endgroup$

















      0












      $begingroup$

      What you are asking is how to convert data from "long" form to "wide" form.



      You can just use the reshape() function which is in the stats package.



      #' I constructed your data frame here
      x<-data.frame(ID=c(1234,1234),
      APPROVAL_STEP=c("STEP_A","STEP_B"),
      APPROVAL_STATUS=c("APPROVED","APPROVED"),
      APPROVAL_DATE=c("23-Jan-2019","21-Jan-2019"),
      APPROVER=c("John Smith","Jane Doe"))




      #' Now to reshape the data

      library(stats)
      reshape(x,
      timevar="APPROVAL_STEP",
      idvar="ID",
      sep="_", direction = "wide")


      Your output should look like.



       ID APPROVAL_STATUS_STEP_A APPROVAL_DATE_STEP_A APPROVER_STEP_A APPROVAL_STATUS_STEP_B APPROVAL_DATE_STEP_B
      1 1234 APPROVED 23-Jan-2019 John Smith APPROVED 21-Jan-2019
      APPROVER_STEP_B
      1 Jane Doe


      The column names is a cosmetic issue, but that's the gist of it.



      Hope this is helpful!






      share|improve this answer








      New contributor




      I'mAnAccountantIKnowAlotOfMath is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.






      $endgroup$















        0












        0








        0





        $begingroup$

        What you are asking is how to convert data from "long" form to "wide" form.



        You can just use the reshape() function which is in the stats package.



        #' I constructed your data frame here
        x<-data.frame(ID=c(1234,1234),
        APPROVAL_STEP=c("STEP_A","STEP_B"),
        APPROVAL_STATUS=c("APPROVED","APPROVED"),
        APPROVAL_DATE=c("23-Jan-2019","21-Jan-2019"),
        APPROVER=c("John Smith","Jane Doe"))




        #' Now to reshape the data

        library(stats)
        reshape(x,
        timevar="APPROVAL_STEP",
        idvar="ID",
        sep="_", direction = "wide")


        Your output should look like.



         ID APPROVAL_STATUS_STEP_A APPROVAL_DATE_STEP_A APPROVER_STEP_A APPROVAL_STATUS_STEP_B APPROVAL_DATE_STEP_B
        1 1234 APPROVED 23-Jan-2019 John Smith APPROVED 21-Jan-2019
        APPROVER_STEP_B
        1 Jane Doe


        The column names is a cosmetic issue, but that's the gist of it.



        Hope this is helpful!






        share|improve this answer








        New contributor




        I'mAnAccountantIKnowAlotOfMath is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
        Check out our Code of Conduct.






        $endgroup$



        What you are asking is how to convert data from "long" form to "wide" form.



        You can just use the reshape() function which is in the stats package.



        #' I constructed your data frame here
        x<-data.frame(ID=c(1234,1234),
        APPROVAL_STEP=c("STEP_A","STEP_B"),
        APPROVAL_STATUS=c("APPROVED","APPROVED"),
        APPROVAL_DATE=c("23-Jan-2019","21-Jan-2019"),
        APPROVER=c("John Smith","Jane Doe"))




        #' Now to reshape the data

        library(stats)
        reshape(x,
        timevar="APPROVAL_STEP",
        idvar="ID",
        sep="_", direction = "wide")


        Your output should look like.



         ID APPROVAL_STATUS_STEP_A APPROVAL_DATE_STEP_A APPROVER_STEP_A APPROVAL_STATUS_STEP_B APPROVAL_DATE_STEP_B
        1 1234 APPROVED 23-Jan-2019 John Smith APPROVED 21-Jan-2019
        APPROVER_STEP_B
        1 Jane Doe


        The column names is a cosmetic issue, but that's the gist of it.



        Hope this is helpful!







        share|improve this answer








        New contributor




        I'mAnAccountantIKnowAlotOfMath is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
        Check out our Code of Conduct.









        share|improve this answer



        share|improve this answer






        New contributor




        I'mAnAccountantIKnowAlotOfMath is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
        Check out our Code of Conduct.









        answered 5 hours ago









        I'mAnAccountantIKnowAlotOfMathI'mAnAccountantIKnowAlotOfMath

        1113




        1113




        New contributor




        I'mAnAccountantIKnowAlotOfMath is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
        Check out our Code of Conduct.





        New contributor





        I'mAnAccountantIKnowAlotOfMath is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
        Check out our Code of Conduct.






        I'mAnAccountantIKnowAlotOfMath is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
        Check out our Code of Conduct.



























            draft saved

            draft discarded
















































            Thanks for contributing an answer to Data Science Stack Exchange!


            • 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.

            Use MathJax to format equations. MathJax reference.


            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%2fdatascience.stackexchange.com%2fquestions%2f47175%2fr-combine-multiple-rows-of-dataframe-by-creating-new-columns-and-union-values%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