ftonti
ftonti

Reputation: 103

Contingency tables ("table" or "xtabs") and kableExtra

This question regards contingency tables in R as implemented with "table" or "xtab" and kableExtra (or with regard to any markdown/quarto output).

A minimal example is the following (which was created from a data frame using xtab):

df <- data.frame(matrix(c(-1,-1,0.41,1,-1,0.88,-1,1,0.32,1,1,0.82),byrow=T,ncol=3))
names(df) <- c("A","B","y")
tab <- xtabs(y ~ A + B, df)

Now R print output of course looks like this

    B
A      -1    1
  -1 0.41 0.32
  1  0.88 0.82

Ouput of kableExtra::kable looks like this

<table>
 <thead>
  <tr>
   <th style="text-align:left;">   </th>
   <th style="text-align:right;"> -1 </th>
   <th style="text-align:right;"> 1 </th>
  </tr>
 </thead>
<tbody>
  <tr>
   <td style="text-align:left;"> -1 </td>
   <td style="text-align:right;"> 0.41 </td>
   <td style="text-align:right;"> 0.32 </td>
  </tr>
  <tr>
   <td style="text-align:left;"> 1 </td>
   <td style="text-align:right;"> 0.88 </td>
   <td style="text-align:right;"> 0.82 </td>
  </tr>
</tbody>
</table>

which completely loses the names of the two dimensions. Imho some reasonable standard behaviour would be

<table>
 <thead>
    <tr>
      <th style="border:none;text-align:center;">   </th>
      <th style="border:none;text-align:center;">   </th>
      <th style="border:none;text-align:center;" colspan="2">B</th>
    </tr>
 </thead>
<tbody>
  <tr>
   <td style="border:none;text-align:left;">   </td>
   <td style="border:none;text-align:left;">   </td>
   <td style="border:none;text-align:center;"> -1 </td>
   <td style="border:none;text-align:center;"> 1 </td>
  </tr>
  <tr>
   <th style="text-align:center;vertical-align:middle; width:4.2500rem; padding:0; border:none;" rowspan="2"> A  </th>
   <td style="border:none;text-align:left;"> -1 </td>
   <td style="border:solid thin #000000;text-align:right;"> 0.41 </td>
   <td style="border:solid thin #000000;text-align:right;"> 0.32 </td>
  </tr>
  <tr>
   <td style="border:none;text-align:left;"> 1 </td>
   <td style="border:solid thin #000000;text-align:right;"> 0.88 </td>
   <td style="border:solid thin #000000;text-align:right;"> 0.82 </td>
  </tr>
</tbody>
</table>

Am I doing something wrong? Would it be reasonable to implement this?

Upvotes: 0

Views: 87

Answers (0)

Related Questions