R Combine Multiple Rows of DataFrame by creating new columns and union values The 2019 Stack Overflow Developer Survey Results Are InData 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 can other administrators access on my machine?

Why is it "Tumoren" and not "Tumore"?

The difference between dialogue marks

Did Section 31 appear in Star Trek: The Next Generation?

Is it true that “A.D.” is traditionally placed before the year number?

Process LaTeX code only if package is loaded

Flying Bloodthirsty Lampshades

Is there a general name for the setup in which payoffs are not known exactly but players try to influence each other's perception of the payoffs?

Is three citations per paragraph excessive for undergraduate research paper?

Why can Shazam fly?

What do the Banks children have against barley water?

Potential by Assembling Charges

Could JWST stay at L2 "forever"?

Time travel alters history but people keep saying nothing's changed

Must numeric JSON keys be quoted?

Output the Arecibo Message

Is bread bad for ducks?

Why is the maximum length of OpenWrt’s root password 8 characters?

Is an up-to-date browser secure on an out-of-date OS?

Spanish for "widget"

What does Linus Torvalds mean when he says that Git "never ever" tracks a file?

Is flight data recorder erased after every flight?

Inflated grade on resume at previous job, might former employer tell new employer?

What is the purpose of the constant in the probability density function



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



The 2019 Stack Overflow Developer Survey Results Are InData 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 Apr 4 at 16:12









        I'mAnAccountantIKnowAlotOfMathI'mAnAccountantIKnowAlotOfMath

        1213




        1213




        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







            Popular posts from this blog

            Adding axes to figuresAdding axes labels to LaTeX figuresLaTeX equivalent of ConTeXt buffersRotate a node but not its content: the case of the ellipse decorationHow to define the default vertical distance between nodes?TikZ scaling graphic and adjust node position and keep font sizeNumerical conditional within tikz keys?adding axes to shapesAlign axes across subfiguresAdding figures with a certain orderLine up nested tikz enviroments or how to get rid of themAdding axes labels to LaTeX figures

            Tähtien Talli Jäsenet | Lähteet | NavigointivalikkoSuomen Hippos – Tähtien Talli

            Do these cracks on my tires look bad? The Next CEO of Stack OverflowDry rot tire should I replace?Having to replace tiresFishtailed so easily? Bad tires? ABS?Filling the tires with something other than air, to avoid puncture hassles?Used Michelin tires safe to install?Do these tyre cracks necessitate replacement?Rumbling noise: tires or mechanicalIs it possible to fix noisy feathered tires?Are bad winter tires still better than summer tires in winter?Torque converter failure - Related to replacing only 2 tires?Why use snow tires on all 4 wheels on 2-wheel-drive cars?