I am generating an ftable (by running ftable on the results of a xtabs command) and I am getting 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 that it is a ftable class but I'd like to store is as the following. I am wondering if there is any efficient way of doing it 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
table() command can be used to create contingency tables in R because the command can handle data in simple vectors or more complex matrix and data frame objects. The more complex the original data, the more complex is the resulting contingency table.
ftable() , short for "flatten table," is a function in R that creates a flat contingency table.
you can do that work by:
> # 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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With