Convert an Array into a Data Frame

Description

to.data.frame converts an array into a data frame, in such a way that a chosen dimensional extent forms variables in the data frame. The elements of the array must be either atomic, data frames with matching variables, or coercable into such data frames.

Usage

to.data.frame(X,as.vars=1,name="Freq")

Arguments

X

an array.

as.vars

a numeric value or a character string. If it is a numeric value then it indicates the dimensional extend which defines the variables. If it is a character string then it is matched against the names of the dimenstional extents. This is applicable e.g. if X is a contingency table and the dimensional extents are named after the cross-classified factors. Takes effect only if X is an atomic array. If as.vars equals zero, a new variable is created that contains the values of the array, that is, to.data.frame acts on the array X like as.data.frame(as.table(X))

name

a character string; the name of the variable created if X is an atomic array and as.vars equals zero.

Value

A data frame.

Examples

berkeley <- Aggregate(Table(Admit,Freq)~.,data=UCBAdmissions)
berktest1 <- By(~Dept+Gender,
               glm(cbind(Admitted,Rejected)~1,family="binomial"),
               data=berkeley)
berktest2 <- By(~Dept,
               glm(cbind(Admitted,Rejected)~Gender,family="binomial"),
               data=berkeley)
Stest1 <- Lapply(berktest2,function(x)predict(x,,se.fit=TRUE)[c("fit","se.fit")])
Stest2 <- Sapply(berktest2,function(x)coef(summary(x)))
Stest2.1 <- Lapply(berktest1,function(x)predict(x,,se.fit=TRUE)[c("fit","se.fit")])
to.data.frame(Stest1)
   Dept        fit     se.fit
1     A  0.4921214 0.07174966
2     A  1.5441974 0.25272027
3     B  0.5337493 0.08754301
4     B  0.7537718 0.42874646
5     C -0.5355182 0.11494077
6     C -0.6604399 0.08664894
7     D -0.7039581 0.10407019
8     D -0.6219709 0.10831411
9     E -0.9569618 0.16159920
10    E -1.1571488 0.11824880
11    F -2.7697438 0.21978068
12    F -2.5808479 0.21171027
to.data.frame(Stest2,as.vars=2)
           Var1 Dept    Estimate Std. Error     z value     Pr(>|z|)
1   (Intercept)    A  0.49212143 0.07174966   6.8588682 6.940825e-12
2  GenderFemale    A  1.05207596 0.26270810   4.0047336 6.208742e-05
3   (Intercept)    B  0.53374926 0.08754301   6.0969945 1.080813e-09
4  GenderFemale    B  0.22002254 0.43759263   0.5028022 6.151033e-01
5   (Intercept)    C -0.53551824 0.11494077  -4.6590799 3.176259e-06
6  GenderFemale    C -0.12492163 0.14394242  -0.8678583 3.854719e-01
7   (Intercept)    D -0.70395810 0.10407019  -6.7642627 1.339898e-11
8  GenderFemale    D  0.08198719 0.15020836   0.5458231 5.851875e-01
9   (Intercept)    E -0.95696177 0.16159920  -5.9218225 3.183932e-09
10 GenderFemale    E -0.20018702 0.20024255  -0.9997227 3.174447e-01
11  (Intercept)    F -2.76974377 0.21978068 -12.6023077 2.050557e-36
12 GenderFemale    F  0.18889583 0.30516354   0.6189987 5.359172e-01
to.data.frame(Stest2.1)
   Dept Gender        fit     se.fit
1     A   Male  0.4921214 0.07174966
2     B   Male  0.5337493 0.08754301
3     C   Male -0.5355182 0.11494077
4     D   Male -0.7039581 0.10407019
5     E   Male -0.9569618 0.16159920
6     F   Male -2.7697438 0.21978068
7     A Female  1.5441974 0.25272027
8     B Female  0.7537718 0.42874646
9     C Female -0.6604399 0.08664894
10    D Female -0.6219709 0.10831411
11    E Female -1.1571488 0.11824870
12    F Female -2.5808479 0.21171027
# Recasting a contingency table
to.data.frame(UCBAdmissions,as.vars="Admit")
   Gender Dept Admitted Rejected
1    Male    A      512      313
2  Female    A       89       19
3    Male    B      353      207
4  Female    B       17        8
5    Male    C      120      205
6  Female    C      202      391
7    Male    D      138      279
8  Female    D      131      244
9    Male    E       53      138
10 Female    E       94      299
11   Male    F       22      351
12 Female    F       24      317