Reputation: 10964
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
Upvotes: 7
Views: 5618
Reputation: 11
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)
Upvotes: 0
Reputation: 66842
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
Upvotes: 16