我正在生成一个ftable(通过在xtabs命令的结果上运行ftable),我得到以下内容。
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
我知道这是一个ftable类,但我想存储如下。我想知道在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
答案 0 :(得分:16)
你可以通过以下方式完成这项工作:
> # 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
答案 1 :(得分:0)
我知道这个问题已经过时了,但万一它可以帮到某人:
ftable1 = ftable(Titanic, row.vars = 1:3)
library("metrumrg")
df1 = ftable2data.frame(ftable1)
df1
class(df1)