Convert ftable (contingency table) to dataframe to R

I generate ftable (by running ftable based on the results of the xtabs command), and I get the following.

Var1 Var2 date group 2007-01-01 q1 1 9 q2 2 8 q3 3 7 2007-01-02 q1 6 6 q2 7 5 q3 8 4 

I understand this is a ftable class, but I would like to keep the following. I am wondering if there is an efficient way to do this in R?

 date group Var1 Var2 2007-01-01 q1 1 9 2007-01-01 q2 2 8 2007-01-01 q3 3 7 2007-01-02 q1 6 6 2007-01-02 q2 7 5 2007-01-02 q3 8 4 
+6
source share
2 answers

you can do this work:

 > # from ?ftable > r <- ftable(Titanic, row.vars = 1:3) > r Survived No Yes Class Sex Age 1st Male Child 0 5 Adult 118 57 ... snip ... Female Child 0 0 Adult 3 20 > > # long format > as.data.frame(r) Class Sex Age Survived Freq 1 1st Male Child No 0 2 2nd Male Child No 0 3 3rd Male Child No 35 ... snip ... 30 2nd Female Adult Yes 80 31 3rd Female Adult Yes 76 32 Crew Female Adult Yes 20 > > # wide format, but do not care the col name > data.frame(expand.grid(rev(attr(r, "row.vars"))), unclass(r)) Age Sex Class X1 X2 1 Child Male 1st 0 5 2 Adult Male 1st 118 57 3 Child Female 1st 0 1 ... snip ... 14 Adult Male Crew 670 192 15 Child Female Crew 0 0 16 Adult Female Crew 3 20 > > # using reshape2 library > library(reshape2) > dcast(as.data.frame(r), as.formula(paste(paste(names(attr(r, "row.vars")), collapse="+"), "~", paste(names(attr(r, "col.vars")))))) Using Freq as value column: use value_var to override. Class Sex Age No Yes 1 1st Male Child 0 5 2 1st Male Adult 118 57 3 1st Female Child 0 1 ... snip ... 14 Crew Male Adult 670 192 15 Crew Female Child 0 0 16 Crew Female Adult 3 20 
+14
source

I know this question is old, but in case it helps someone:

 ftable1 = ftable(Titanic, row.vars = 1:3) library("metrumrg") df1 = ftable2data.frame(ftable1) df1 class(df1) 
0
source

Source: https://habr.com/ru/post/891260/


All Articles