Create Multiple 2-dimensional Tables from Multiple Columns in R Using dplyrUse R dplyr/purrr To Get Chi-square Output Matrices By GroupHow to sort a dataframe by multiple column(s)Group by multiple columns in dplyr, using string vector inputExtract a dplyr tbl column as a vectorSummarizing multiple columns with dplyr?Gather multiple sets of columnsCan dplyr join on multiple columns or composite key?Sum across multiple columns with dplyrR spreading multiple columns with tidyrR dplyr: Drop multiple columnsCreating multiple columns in dplyr

What are the minimum element requirements for a star?

Has Donald Duck ever had any love interest besides Daisy?

Can the treble clef be used instead of the bass clef in piano music?

Cage Length (Rear Derallieur) and Total Capacity

Can the Protection fighting style be used in this way?

Can't CD to Desktop anymore

"Startup" working hours - is it normal to be asked to work 11 hours/ day?

How can I improve combat so my players don't always use the strategy of collectively focusing fire on one enemy at a time until it's dead?

How to explain to traditional people why they should upgrade their old Windows XP device?

Ran out of space of newly installed HDD?

Can the fact that Trump issued a Do Not Testify be used in impeachment articles?

POVM number of measurement

Elevator design implementation in C++

Idiomatic way to distinguish two zero-arg constructors

Should I tell an editor that I believe an article I'm reviewing is not good enough for the journal?

Why chip designers chose to jump from 32bit to 64bit CPUs?

Did Ohio pass a law granting students the right to give scientifically wrong answers consistent with their religious beliefs?

Is it possible to unwrap genus-0 mesh so each vert has one and only unique uv?

Using characters to delimit commands (like markdown)

What is the pKaH of pyrrole?

Why are rain clouds darker?

Beginner Tactics - Why Isn't This Mate?

Can the UK and the EU delay Brexit again?

Why cant Ridge Regression benift from negative lamda?



Create Multiple 2-dimensional Tables from Multiple Columns in R Using dplyr


Use R dplyr/purrr To Get Chi-square Output Matrices By GroupHow to sort a dataframe by multiple column(s)Group by multiple columns in dplyr, using string vector inputExtract a dplyr tbl column as a vectorSummarizing multiple columns with dplyr?Gather multiple sets of columnsCan dplyr join on multiple columns or composite key?Sum across multiple columns with dplyrR spreading multiple columns with tidyrR dplyr: Drop multiple columnsCreating multiple columns in dplyr






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty
margin-bottom:0;









0


















I'm looking for an efficient way to create multiple 2-dimension tables from an R dataframe of chi-square statistics. The code below builds on this answer to a previous question of mine about getting chi-square stats by groups. Now I want to create tables from the output by group. Here's what I have so far using the hsbdemo data frame from the UCLA R site:



ml <- foreign::read.dta("https://stats.idre.ucla.edu/stat/data/hsbdemo.dta")

str(ml)

'data.frame': 200 obs. of 13 variables:
$ id : num 45 108 15 67 153 51 164 133 2 53 ...
$ female : Factor w/ 2 levels "male","female": 2 1 1 1 1 2 1 1 2 1 ...
$ ses : Factor w/ 3 levels "low","middle",..: 1 2 3 1 2 3 2 2 2 2 ...
$ schtyp : Factor w/ 2 levels "public","private": 1 1 1 1 1 1 1 1 1 1 ...
$ prog : Factor w/ 3 levels "general","academic",..: 3 1 3 3 3 1 3 3 3 3 ...

ml %>%
dplyr::select(prog, ses, schtyp) %>%
table() %>%
apply(3, chisq.test, simulate.p.value = TRUE) %>%
lapply(`[`, c(6,7,9)) %>%
reshape2::melt() %>%
tidyr::spread(key = L2, value = value) %>%
dplyr::rename(SchoolType = L1) %>%
dplyr::arrange(SchoolType, prog) %>%
dplyr::select(-observed, -expected) %>%
reshape2::acast(., prog ~ ses ~ SchoolType ) %>%
tbl_df()


The output after the last arrange statement produces this tibble (showing only the first five rows):



 prog ses SchoolType expected observed stdres
1 general low private 0.37500 2 3.0404678
2 general middle private 3.56250 3 -0.5187244
3 general high private 2.06250 1 -1.0131777
4 academic low private 1.50000 0 -2.5298221
5 academic middle private 14.25000 14 -0.2078097


It's easy to select one column, for example, stdres, and pass it to acast and tbl_df, which gets pretty much what I'm after:



# A tibble: 3 x 6
low.private middle.private high.private low.public middle.public high.public
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 3.04 -0.519 -1.01 1.47 -0.236 -1.18
2 -2.53 -0.208 1.50 -0.940 -2.06 3.21
3 -0.377 1.21 -1.06 -0.331 2.50 -2.45


Now I can repeat these steps for observed and expected frequencies and bind them by rows, but that seems inefficient. The output would observed frequencies stacked on expected, stacked on the standardized residuals. Something like this:



 low.private middle.private high.private low.public middle.public high.public
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 2 3 1 14 17 8
2 0 14 10 19 30 32
3 0 2 0 12 29 7
4 0.375 3.56 2.06 10.4 17.6 10.9
5 1.5 14.2 8.25 21.7 36.6 22.7
6 0.125 1.19 0.688 12.9 21.7 13.4
7 3.04 -0.519 -1.01 1.47 -0.236 -1.18
8 -2.53 -0.208 1.50 -0.940 -2.06 3.21
9 -0.377 1.21 -1.06 -0.331 2.50 -2.45


Seems there ought to be a way to do this without repeating the code for each column, probably by creating and processing a list. Thanks in advance.










share|improve this question

































    0


















    I'm looking for an efficient way to create multiple 2-dimension tables from an R dataframe of chi-square statistics. The code below builds on this answer to a previous question of mine about getting chi-square stats by groups. Now I want to create tables from the output by group. Here's what I have so far using the hsbdemo data frame from the UCLA R site:



    ml <- foreign::read.dta("https://stats.idre.ucla.edu/stat/data/hsbdemo.dta")

    str(ml)

    'data.frame': 200 obs. of 13 variables:
    $ id : num 45 108 15 67 153 51 164 133 2 53 ...
    $ female : Factor w/ 2 levels "male","female": 2 1 1 1 1 2 1 1 2 1 ...
    $ ses : Factor w/ 3 levels "low","middle",..: 1 2 3 1 2 3 2 2 2 2 ...
    $ schtyp : Factor w/ 2 levels "public","private": 1 1 1 1 1 1 1 1 1 1 ...
    $ prog : Factor w/ 3 levels "general","academic",..: 3 1 3 3 3 1 3 3 3 3 ...

    ml %>%
    dplyr::select(prog, ses, schtyp) %>%
    table() %>%
    apply(3, chisq.test, simulate.p.value = TRUE) %>%
    lapply(`[`, c(6,7,9)) %>%
    reshape2::melt() %>%
    tidyr::spread(key = L2, value = value) %>%
    dplyr::rename(SchoolType = L1) %>%
    dplyr::arrange(SchoolType, prog) %>%
    dplyr::select(-observed, -expected) %>%
    reshape2::acast(., prog ~ ses ~ SchoolType ) %>%
    tbl_df()


    The output after the last arrange statement produces this tibble (showing only the first five rows):



     prog ses SchoolType expected observed stdres
    1 general low private 0.37500 2 3.0404678
    2 general middle private 3.56250 3 -0.5187244
    3 general high private 2.06250 1 -1.0131777
    4 academic low private 1.50000 0 -2.5298221
    5 academic middle private 14.25000 14 -0.2078097


    It's easy to select one column, for example, stdres, and pass it to acast and tbl_df, which gets pretty much what I'm after:



    # A tibble: 3 x 6
    low.private middle.private high.private low.public middle.public high.public
    <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
    1 3.04 -0.519 -1.01 1.47 -0.236 -1.18
    2 -2.53 -0.208 1.50 -0.940 -2.06 3.21
    3 -0.377 1.21 -1.06 -0.331 2.50 -2.45


    Now I can repeat these steps for observed and expected frequencies and bind them by rows, but that seems inefficient. The output would observed frequencies stacked on expected, stacked on the standardized residuals. Something like this:



     low.private middle.private high.private low.public middle.public high.public
    <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
    1 2 3 1 14 17 8
    2 0 14 10 19 30 32
    3 0 2 0 12 29 7
    4 0.375 3.56 2.06 10.4 17.6 10.9
    5 1.5 14.2 8.25 21.7 36.6 22.7
    6 0.125 1.19 0.688 12.9 21.7 13.4
    7 3.04 -0.519 -1.01 1.47 -0.236 -1.18
    8 -2.53 -0.208 1.50 -0.940 -2.06 3.21
    9 -0.377 1.21 -1.06 -0.331 2.50 -2.45


    Seems there ought to be a way to do this without repeating the code for each column, probably by creating and processing a list. Thanks in advance.










    share|improve this question





























      0













      0









      0








      I'm looking for an efficient way to create multiple 2-dimension tables from an R dataframe of chi-square statistics. The code below builds on this answer to a previous question of mine about getting chi-square stats by groups. Now I want to create tables from the output by group. Here's what I have so far using the hsbdemo data frame from the UCLA R site:



      ml <- foreign::read.dta("https://stats.idre.ucla.edu/stat/data/hsbdemo.dta")

      str(ml)

      'data.frame': 200 obs. of 13 variables:
      $ id : num 45 108 15 67 153 51 164 133 2 53 ...
      $ female : Factor w/ 2 levels "male","female": 2 1 1 1 1 2 1 1 2 1 ...
      $ ses : Factor w/ 3 levels "low","middle",..: 1 2 3 1 2 3 2 2 2 2 ...
      $ schtyp : Factor w/ 2 levels "public","private": 1 1 1 1 1 1 1 1 1 1 ...
      $ prog : Factor w/ 3 levels "general","academic",..: 3 1 3 3 3 1 3 3 3 3 ...

      ml %>%
      dplyr::select(prog, ses, schtyp) %>%
      table() %>%
      apply(3, chisq.test, simulate.p.value = TRUE) %>%
      lapply(`[`, c(6,7,9)) %>%
      reshape2::melt() %>%
      tidyr::spread(key = L2, value = value) %>%
      dplyr::rename(SchoolType = L1) %>%
      dplyr::arrange(SchoolType, prog) %>%
      dplyr::select(-observed, -expected) %>%
      reshape2::acast(., prog ~ ses ~ SchoolType ) %>%
      tbl_df()


      The output after the last arrange statement produces this tibble (showing only the first five rows):



       prog ses SchoolType expected observed stdres
      1 general low private 0.37500 2 3.0404678
      2 general middle private 3.56250 3 -0.5187244
      3 general high private 2.06250 1 -1.0131777
      4 academic low private 1.50000 0 -2.5298221
      5 academic middle private 14.25000 14 -0.2078097


      It's easy to select one column, for example, stdres, and pass it to acast and tbl_df, which gets pretty much what I'm after:



      # A tibble: 3 x 6
      low.private middle.private high.private low.public middle.public high.public
      <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
      1 3.04 -0.519 -1.01 1.47 -0.236 -1.18
      2 -2.53 -0.208 1.50 -0.940 -2.06 3.21
      3 -0.377 1.21 -1.06 -0.331 2.50 -2.45


      Now I can repeat these steps for observed and expected frequencies and bind them by rows, but that seems inefficient. The output would observed frequencies stacked on expected, stacked on the standardized residuals. Something like this:



       low.private middle.private high.private low.public middle.public high.public
      <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
      1 2 3 1 14 17 8
      2 0 14 10 19 30 32
      3 0 2 0 12 29 7
      4 0.375 3.56 2.06 10.4 17.6 10.9
      5 1.5 14.2 8.25 21.7 36.6 22.7
      6 0.125 1.19 0.688 12.9 21.7 13.4
      7 3.04 -0.519 -1.01 1.47 -0.236 -1.18
      8 -2.53 -0.208 1.50 -0.940 -2.06 3.21
      9 -0.377 1.21 -1.06 -0.331 2.50 -2.45


      Seems there ought to be a way to do this without repeating the code for each column, probably by creating and processing a list. Thanks in advance.










      share|improve this question
















      I'm looking for an efficient way to create multiple 2-dimension tables from an R dataframe of chi-square statistics. The code below builds on this answer to a previous question of mine about getting chi-square stats by groups. Now I want to create tables from the output by group. Here's what I have so far using the hsbdemo data frame from the UCLA R site:



      ml <- foreign::read.dta("https://stats.idre.ucla.edu/stat/data/hsbdemo.dta")

      str(ml)

      'data.frame': 200 obs. of 13 variables:
      $ id : num 45 108 15 67 153 51 164 133 2 53 ...
      $ female : Factor w/ 2 levels "male","female": 2 1 1 1 1 2 1 1 2 1 ...
      $ ses : Factor w/ 3 levels "low","middle",..: 1 2 3 1 2 3 2 2 2 2 ...
      $ schtyp : Factor w/ 2 levels "public","private": 1 1 1 1 1 1 1 1 1 1 ...
      $ prog : Factor w/ 3 levels "general","academic",..: 3 1 3 3 3 1 3 3 3 3 ...

      ml %>%
      dplyr::select(prog, ses, schtyp) %>%
      table() %>%
      apply(3, chisq.test, simulate.p.value = TRUE) %>%
      lapply(`[`, c(6,7,9)) %>%
      reshape2::melt() %>%
      tidyr::spread(key = L2, value = value) %>%
      dplyr::rename(SchoolType = L1) %>%
      dplyr::arrange(SchoolType, prog) %>%
      dplyr::select(-observed, -expected) %>%
      reshape2::acast(., prog ~ ses ~ SchoolType ) %>%
      tbl_df()


      The output after the last arrange statement produces this tibble (showing only the first five rows):



       prog ses SchoolType expected observed stdres
      1 general low private 0.37500 2 3.0404678
      2 general middle private 3.56250 3 -0.5187244
      3 general high private 2.06250 1 -1.0131777
      4 academic low private 1.50000 0 -2.5298221
      5 academic middle private 14.25000 14 -0.2078097


      It's easy to select one column, for example, stdres, and pass it to acast and tbl_df, which gets pretty much what I'm after:



      # A tibble: 3 x 6
      low.private middle.private high.private low.public middle.public high.public
      <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
      1 3.04 -0.519 -1.01 1.47 -0.236 -1.18
      2 -2.53 -0.208 1.50 -0.940 -2.06 3.21
      3 -0.377 1.21 -1.06 -0.331 2.50 -2.45


      Now I can repeat these steps for observed and expected frequencies and bind them by rows, but that seems inefficient. The output would observed frequencies stacked on expected, stacked on the standardized residuals. Something like this:



       low.private middle.private high.private low.public middle.public high.public
      <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
      1 2 3 1 14 17 8
      2 0 14 10 19 30 32
      3 0 2 0 12 29 7
      4 0.375 3.56 2.06 10.4 17.6 10.9
      5 1.5 14.2 8.25 21.7 36.6 22.7
      6 0.125 1.19 0.688 12.9 21.7 13.4
      7 3.04 -0.519 -1.01 1.47 -0.236 -1.18
      8 -2.53 -0.208 1.50 -0.940 -2.06 3.21
      9 -0.377 1.21 -1.06 -0.331 2.50 -2.45


      Seems there ought to be a way to do this without repeating the code for each column, probably by creating and processing a list. Thanks in advance.







      r dplyr tidyr






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Mar 28 at 22:16







      Joe

















      asked Mar 28 at 22:09









      JoeJoe

      918 bronze badges




      918 bronze badges

























          1 Answer
          1






          active

          oldest

          votes


















          1



















          Might this be the answer?



           ml1 <- ml %>% 
          dplyr::select(prog, ses, schtyp) %>%
          table() %>%
          apply(3, chisq.test, simulate.p.value = TRUE) %>%
          lapply(`[`, c(6,7,9)) %>%
          reshape2::melt()
          ml2 <- ml1 %>%
          dplyr::mutate(type=paste(ses, L1, sep=".")) %>%
          dplyr::select(-ses, -L1) %>%
          tidyr::spread(type, value)


          This gives you



           prog L2 high.private high.public low.private low.public middle.private middle.public
          1 general expected 2.062500 10.910714 0.3750000 10.4464286 3.5625000 17.6428571
          2 general observed 1.000000 8.000000 2.0000000 14.0000000 3.0000000 17.0000000
          3 general stdres -1.013178 -1.184936 3.0404678 1.4663681 -0.5187244 -0.2360209
          4 academic expected 8.250000 22.660714 1.5000000 21.6964286 14.2500000 36.6428571
          5 academic observed 10.000000 32.000000 0.0000000 19.0000000 14.0000000 30.0000000
          6 academic stdres 1.504203 3.212431 -2.5298221 -0.9401386 -0.2078097 -2.0607058
          7 vocation expected 0.687500 13.428571 0.1250000 12.8571429 1.1875000 21.7142857
          8 vocation observed 0.000000 7.000000 0.0000000 12.0000000 2.0000000 29.0000000
          9 vocation stdres -1.057100 -2.445826 -0.3771236 -0.3305575 1.2081594 2.4999085


          I am not sure I understand completely what you are out after... But basically, create a new variable of SES and school type, and gather based on that. And obviously, reorder it as you wish :-)






          share|improve this answer


























          • Thanks, Ott. That's actually damn close. I played with reordering and have it where I want it.

            – Joe
            Mar 29 at 16:12












          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/4.0/"u003ecc by-sa 4.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%2f55407614%2fcreate-multiple-2-dimensional-tables-from-multiple-columns-in-r-using-dplyr%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









          1



















          Might this be the answer?



           ml1 <- ml %>% 
          dplyr::select(prog, ses, schtyp) %>%
          table() %>%
          apply(3, chisq.test, simulate.p.value = TRUE) %>%
          lapply(`[`, c(6,7,9)) %>%
          reshape2::melt()
          ml2 <- ml1 %>%
          dplyr::mutate(type=paste(ses, L1, sep=".")) %>%
          dplyr::select(-ses, -L1) %>%
          tidyr::spread(type, value)


          This gives you



           prog L2 high.private high.public low.private low.public middle.private middle.public
          1 general expected 2.062500 10.910714 0.3750000 10.4464286 3.5625000 17.6428571
          2 general observed 1.000000 8.000000 2.0000000 14.0000000 3.0000000 17.0000000
          3 general stdres -1.013178 -1.184936 3.0404678 1.4663681 -0.5187244 -0.2360209
          4 academic expected 8.250000 22.660714 1.5000000 21.6964286 14.2500000 36.6428571
          5 academic observed 10.000000 32.000000 0.0000000 19.0000000 14.0000000 30.0000000
          6 academic stdres 1.504203 3.212431 -2.5298221 -0.9401386 -0.2078097 -2.0607058
          7 vocation expected 0.687500 13.428571 0.1250000 12.8571429 1.1875000 21.7142857
          8 vocation observed 0.000000 7.000000 0.0000000 12.0000000 2.0000000 29.0000000
          9 vocation stdres -1.057100 -2.445826 -0.3771236 -0.3305575 1.2081594 2.4999085


          I am not sure I understand completely what you are out after... But basically, create a new variable of SES and school type, and gather based on that. And obviously, reorder it as you wish :-)






          share|improve this answer


























          • Thanks, Ott. That's actually damn close. I played with reordering and have it where I want it.

            – Joe
            Mar 29 at 16:12















          1



















          Might this be the answer?



           ml1 <- ml %>% 
          dplyr::select(prog, ses, schtyp) %>%
          table() %>%
          apply(3, chisq.test, simulate.p.value = TRUE) %>%
          lapply(`[`, c(6,7,9)) %>%
          reshape2::melt()
          ml2 <- ml1 %>%
          dplyr::mutate(type=paste(ses, L1, sep=".")) %>%
          dplyr::select(-ses, -L1) %>%
          tidyr::spread(type, value)


          This gives you



           prog L2 high.private high.public low.private low.public middle.private middle.public
          1 general expected 2.062500 10.910714 0.3750000 10.4464286 3.5625000 17.6428571
          2 general observed 1.000000 8.000000 2.0000000 14.0000000 3.0000000 17.0000000
          3 general stdres -1.013178 -1.184936 3.0404678 1.4663681 -0.5187244 -0.2360209
          4 academic expected 8.250000 22.660714 1.5000000 21.6964286 14.2500000 36.6428571
          5 academic observed 10.000000 32.000000 0.0000000 19.0000000 14.0000000 30.0000000
          6 academic stdres 1.504203 3.212431 -2.5298221 -0.9401386 -0.2078097 -2.0607058
          7 vocation expected 0.687500 13.428571 0.1250000 12.8571429 1.1875000 21.7142857
          8 vocation observed 0.000000 7.000000 0.0000000 12.0000000 2.0000000 29.0000000
          9 vocation stdres -1.057100 -2.445826 -0.3771236 -0.3305575 1.2081594 2.4999085


          I am not sure I understand completely what you are out after... But basically, create a new variable of SES and school type, and gather based on that. And obviously, reorder it as you wish :-)






          share|improve this answer


























          • Thanks, Ott. That's actually damn close. I played with reordering and have it where I want it.

            – Joe
            Mar 29 at 16:12













          1















          1











          1









          Might this be the answer?



           ml1 <- ml %>% 
          dplyr::select(prog, ses, schtyp) %>%
          table() %>%
          apply(3, chisq.test, simulate.p.value = TRUE) %>%
          lapply(`[`, c(6,7,9)) %>%
          reshape2::melt()
          ml2 <- ml1 %>%
          dplyr::mutate(type=paste(ses, L1, sep=".")) %>%
          dplyr::select(-ses, -L1) %>%
          tidyr::spread(type, value)


          This gives you



           prog L2 high.private high.public low.private low.public middle.private middle.public
          1 general expected 2.062500 10.910714 0.3750000 10.4464286 3.5625000 17.6428571
          2 general observed 1.000000 8.000000 2.0000000 14.0000000 3.0000000 17.0000000
          3 general stdres -1.013178 -1.184936 3.0404678 1.4663681 -0.5187244 -0.2360209
          4 academic expected 8.250000 22.660714 1.5000000 21.6964286 14.2500000 36.6428571
          5 academic observed 10.000000 32.000000 0.0000000 19.0000000 14.0000000 30.0000000
          6 academic stdres 1.504203 3.212431 -2.5298221 -0.9401386 -0.2078097 -2.0607058
          7 vocation expected 0.687500 13.428571 0.1250000 12.8571429 1.1875000 21.7142857
          8 vocation observed 0.000000 7.000000 0.0000000 12.0000000 2.0000000 29.0000000
          9 vocation stdres -1.057100 -2.445826 -0.3771236 -0.3305575 1.2081594 2.4999085


          I am not sure I understand completely what you are out after... But basically, create a new variable of SES and school type, and gather based on that. And obviously, reorder it as you wish :-)






          share|improve this answer














          Might this be the answer?



           ml1 <- ml %>% 
          dplyr::select(prog, ses, schtyp) %>%
          table() %>%
          apply(3, chisq.test, simulate.p.value = TRUE) %>%
          lapply(`[`, c(6,7,9)) %>%
          reshape2::melt()
          ml2 <- ml1 %>%
          dplyr::mutate(type=paste(ses, L1, sep=".")) %>%
          dplyr::select(-ses, -L1) %>%
          tidyr::spread(type, value)


          This gives you



           prog L2 high.private high.public low.private low.public middle.private middle.public
          1 general expected 2.062500 10.910714 0.3750000 10.4464286 3.5625000 17.6428571
          2 general observed 1.000000 8.000000 2.0000000 14.0000000 3.0000000 17.0000000
          3 general stdres -1.013178 -1.184936 3.0404678 1.4663681 -0.5187244 -0.2360209
          4 academic expected 8.250000 22.660714 1.5000000 21.6964286 14.2500000 36.6428571
          5 academic observed 10.000000 32.000000 0.0000000 19.0000000 14.0000000 30.0000000
          6 academic stdres 1.504203 3.212431 -2.5298221 -0.9401386 -0.2078097 -2.0607058
          7 vocation expected 0.687500 13.428571 0.1250000 12.8571429 1.1875000 21.7142857
          8 vocation observed 0.000000 7.000000 0.0000000 12.0000000 2.0000000 29.0000000
          9 vocation stdres -1.057100 -2.445826 -0.3771236 -0.3305575 1.2081594 2.4999085


          I am not sure I understand completely what you are out after... But basically, create a new variable of SES and school type, and gather based on that. And obviously, reorder it as you wish :-)







          share|improve this answer













          share|improve this answer




          share|improve this answer










          answered Mar 29 at 5:09









          Ott ToometOtt Toomet

          1,5458 silver badges20 bronze badges




          1,5458 silver badges20 bronze badges















          • Thanks, Ott. That's actually damn close. I played with reordering and have it where I want it.

            – Joe
            Mar 29 at 16:12

















          • Thanks, Ott. That's actually damn close. I played with reordering and have it where I want it.

            – Joe
            Mar 29 at 16:12
















          Thanks, Ott. That's actually damn close. I played with reordering and have it where I want it.

          – Joe
          Mar 29 at 16:12





          Thanks, Ott. That's actually damn close. I played with reordering and have it where I want it.

          – Joe
          Mar 29 at 16:12




















          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%2f55407614%2fcreate-multiple-2-dimensional-tables-from-multiple-columns-in-r-using-dplyr%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

          Kamusi Yaliyomo Aina za kamusi | Muundo wa kamusi | Faida za kamusi | Dhima ya picha katika kamusi | Marejeo | Tazama pia | Viungo vya nje | UrambazajiKuhusu kamusiGo-SwahiliWiki-KamusiKamusi ya Kiswahili na Kiingerezakuihariri na kuongeza habari

          Swift 4 - func physicsWorld not invoked on collision? The Next CEO of Stack OverflowHow to call Objective-C code from Swift#ifdef replacement in the Swift language@selector() in Swift?#pragma mark in Swift?Swift for loop: for index, element in array?dispatch_after - GCD in Swift?Swift Beta performance: sorting arraysSplit a String into an array in Swift?The use of Swift 3 @objc inference in Swift 4 mode is deprecated?How to optimize UITableViewCell, because my UITableView lags

          Access current req object everywhere in Node.js ExpressWhy are global variables considered bad practice? (node.js)Using req & res across functionsHow do I get the path to the current script with Node.js?What is Node.js' Connect, Express and “middleware”?Node.js w/ express error handling in callbackHow to access the GET parameters after “?” in Express?Modify Node.js req object parametersAccess “app” variable inside of ExpressJS/ConnectJS middleware?Node.js Express app - request objectAngular Http Module considered middleware?Session variables in ExpressJSAdd properties to the req object in expressjs with Typescript