'Why table() function is giving me long data instead of wide?

I'm having trouble getting my data set to work with the table() function. My data originally looks something like this:

Student_Ethnicity Pre_DAS Ethnicity
White Black
White White
Asian Black
Black White
White Black

But, I want it to tabulate like this:

Student_Ethnicity White Black Asian
White 1 2 0
Black 1 0 0
Asian 0 1 0

I previously ran this code:

PreDASEthnicityPredictor <- table(Predict_DAS$Student_Ethnicity, Predict_DAS$PreDAS_Ethnicity)

But, when the data tabulated it looked like this:

Student_Ethnicity Pre_DAS Ethnicity Frq
White White 1
White Black 2
White Asian 0
Black White 1
Black Black 0
Black Asian 0
Asian White 0
Asian Black 1
Asian Asian 0

Is there a specific reason this could be happening and how can I make this tabulate correctly? It is important to get this table format for a chi-squared analysis I would like to do on this later.

Here is the actual dataset I am working with:

structure(list(Predict_DAS.Student_Ethnicity = c("White/Caucasian", 
"White/Caucasian", "White/Caucasian", "White/Caucasian", "Other", 
"White/Caucasian", "White/Caucasian", "Multiple", "White/Caucasian", 
"White/Caucasian", "Black/African American", "White/Caucasian", 
"White/Caucasian", "Black/African American", "Hispanic/Latinx", 
"Black/African American", "White/Caucasian", "Other", "Other", 
"Hispanic/Latinx", "Hispanic/Latinx", "Other", "Native Hawaiian or Pacific Islander", 
"Black/African American", "Black/African American", "Hispanic/Latinx", 
"White/Caucasian", "White/Caucasian", "White/Caucasian", "Black/African American", 
"Black/African American", "White/Caucasian", "Black/African American", 
"Hispanic/Latinx", "Black/African American", "White/Caucasian", 
"Black/African American", "White/Caucasian", "Black/African American", 
"White/Caucasian", "White/Caucasian", "Other", "Native Hawaiian or Pacific Islander", 
"Black/African American", "White/Caucasian", "Other", "Hispanic/Latinx", 
"No Selection", "White/Caucasian", "American Indian or Alaskan Native", 
"Hispanic/Latinx", "White/Caucasian", "Hispanic/Latinx", "Black/African American", 
"American Indian or Alaskan Native", "White/Caucasian", "White/Caucasian", 
"Multiple", "White/Caucasian", "American Indian or Alaskan Native", 
"No Selection", "Asian", "White/Caucasian", "Black/African American", 
"Native Hawaiian or Pacific Islander", "Native Hawaiian or Pacific Islander", 
"Hispanic/Latinx", "American Indian or Alaskan Native", "No Selection", 
"Asian", "Black/African American", "Black/African American", 
"Black/African American", "White/Caucasian", "American Indian or Alaskan Native", 
"Black/African American", "Black/African American", "White/Caucasian", 
"Black/African American", "Black/African American", "Multiple", 
"White/Caucasian", "Hispanic/Latinx", "White/Caucasian", "Asian", 
"Multiple", "White/Caucasian", "White/Caucasian", "Black/African American", 
"White/Caucasian", "No Selection", "White/Caucasian", "White/Caucasian", 
"Multiple", "Black/African American", "White/Caucasian", "White/Caucasian", 
"Black/African American", "Other", "Black/African American", 
"Multiple", "Black/African American", "Hispanic/Latinx", "White/Caucasian", 
"White/Caucasian", "White/Caucasian", "Black/African American", 
"White/Caucasian", "White/Caucasian", "White/Caucasian", "Black/African American", 
"Black/African American", "Hispanic/Latinx", "Multiple", "Black/African American", 
"Black/African American", "Asian", "White/Caucasian", "White/Caucasian", 
"Black/African American", "White/Caucasian", "Black/African American", 
"White/Caucasian", "Other", "Multiple", "Multiple", "Multiple", 
"No Selection", "Asian", "No Selection", "White/Caucasian", "White/Caucasian", 
"No Selection", "Other", "White/Caucasian", "American Indian or Alaskan Native", 
"White/Caucasian", "Hispanic/Latinx", "Multiple", "Hispanic/Latinx"
), Predict_DAS.PreDAS_Ethnicity = c("White/Caucasian", "White/Caucasian", 
"Asian", "White/Caucasian", "Other", "No Selection", "White/Caucasian", 
"No Selection", "No Selection", "White/Caucasian", "Black/African American", 
"White/Caucasian", "No Selection", "No Selection", "Hispanic/Latinx", 
"Black/African American", "No Selection", "Asian", "Other", "No Selection", 
"No Selection", "No Selection", "White/Caucasian", "No Selection", 
"No Selection", "Hispanic/Latinx", "No Selection", "White/Caucasian", 
"No Selection", "Black/African American", "Black/African American", 
"White/Caucasian", "White/Caucasian", "Hispanic/Latinx", "No Selection", 
"Hispanic/Latinx", "No Selection", "White/Caucasian", "Black/African American", 
"White/Caucasian", "White/Caucasian", "No Selection", "Asian", 
"White/Caucasian", "White/Caucasian", "No Selection", "Hispanic/Latinx", 
"Other", "White/Caucasian", "Black/African American", "No Selection", 
"White/Caucasian", "No Selection", "Black/African American", 
"No Selection", "White/Caucasian", "Asian", "Multiple", "White/Caucasian", 
"White/Caucasian", "No Selection", "No Selection", "No Selection", 
"Black/African American", "No Selection", "No Selection", "No Selection", 
"White/Caucasian", "Black/African American", "Other", "Black/African American", 
"No Selection", "Black/African American", "White/Caucasian", 
"No Selection", "Black/African American", "No Selection", "No Selection", 
"No Selection", "Black/African American", "Multiple", "Black/African American", 
"Hispanic/Latinx", "Black/African American", "Asian", "Multiple", 
"White/Caucasian", "White/Caucasian", "Black/African American", 
"White/Caucasian", "No Selection", "No Selection", "White/Caucasian", 
"No Selection", "Asian", "No Selection", "White/Caucasian", "Black/African American", 
"No Selection", "Black/African American", "Black/African American", 
"Black/African American", "No Selection", "White/Caucasian", 
"No Selection", "White/Caucasian", "Black/African American", 
"White/Caucasian", "No Selection", "White/Caucasian", "No Selection", 
"Black/African American", "No Selection", "Other", "No Selection", 
"No Selection", "No Selection", "White/Caucasian", "White/Caucasian", 
"Black/African American", "White/Caucasian", "Black/African American", 
"White/Caucasian", "Other", "White/Caucasian", "White/Caucasian", 
"No Selection", "No Selection", "White/Caucasian", "No Selection", 
"White/Caucasian", "Black/African American", "Black/African American", 
"Black/African American", "Other", "No Selection", "White/Caucasian", 
"Black/African American", "No Selection", "No Selection")), class = "data.frame", row.names = c(NA, 
-140L))


Solution 1:[1]

Assuming your data set is called df, you could do the following with the tidyverse packages:

library(tidyverse)

result <- df %>% 
  count(Predict_DAS.Student_Ethnicity, Predict_DAS.PreDAS_Ethnicity) %>% 
  pivot_wider(names_from = Predict_DAS.PreDAS_Ethnicity, values_from = n, values_fill = 0)

  Predict_DAS.Student_Ethnicity   `Black/African…` `No Selection` `White/Caucasi…` Asian Other
  <chr>                                      <int>          <int>            <int> <int> <int>
1 American Indian or Alaskan Nat…                1              3                2     0     0
2 Asian                                          0              2                1     1     1
3 Black/African American                        19             11                2     1     0
4 Hispanic/Latinx                                1              8                0     0     0
5 Multiple                                       1              4                2     0     1
6 Native Hawaiian or Pacific Isl…                0              2                1     1     0
7 No Selection                                   2              4                0     0     1
8 Other                                          1              4                0     1     3
9 White/Caucasian                                3             12               32     2     1
# … with 2 more variables: `Hispanic/Latinx` <int>, Multiple <int>

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 jdobres