Here is a possibility
Dat <- cbind(expand.grid(f1 = letters[1:5], f2 = LETTERS[1:5],
f3 = as.character(1:5)), x = rnorm(125))
M <- with(Dat, {
f23 <- f2:f3
m <- matrix(0, length(levels(f1)), length(levels(f23)))
i <- match(f1, levels(f1))
j <- match(f23, levels(f23))
m[cbind(i,j)] <- x
dimnames(m) <- list(levels(f1), levels(f23))
m
})
> M[1:5, 1:5]
A:1 A:2 A:3 A:4 A:5
a 1.72686085 -2.0605242 1.0989119 0.8096139 1.0146972
b -0.34512446 -0.1709805 0.3401842 0.5815685 -1.4862872
c 1.14489491 -0.3959085 0.3222197 -1.1108793 0.3676764
d 0.02520386 -1.0018102 -0.7232067 -0.6142914 0.6694813
e -1.23366653 0.3826862 -0.6797035 0.6536055 0.8865669
This should work provided you have one entry per f1 x f2 x f3 cell. The rows of
the data frame may be in arbitrary order.
Bill Venables
http://www.cmis.csiro.au/bill.venables/
-----Original Message-----
From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org]
On Behalf Of Thomas S. Dye
Sent: Monday, 23 March 2009 7:36 AM
To: r-help at r-project.org
Subject: [R] data frame to array
Aloha all,
I have a data frame with 4 columns. The first three are factors (f1,
f2, f3) and the fourth is numeric. I'd like to explore these data
using median polish. To do that I plan to use medpolish() on the
matrix[f1,f2xf3], then medpolish on the resulting matrix[f2,f3]. This
approach is described by Cook on page 141 of Exploring Data Tables,
Trends, and Shapes.
split() gets me close to where I want to be, but results in a list,
rather than a matrix. How do I construct the matrix[f1,f2xf3] from my
data frame?
Also, any pointers to existing code that performs multi-way median
polish will be appreciated.
Sorry for the newbie-type query, but manipulating data prior to
analysis is really hard for me in R.
All the best,
Tom
Thomas S. Dye, Ph.D.
T. S. Dye & Colleagues, Archaeologists, Inc.
Phone: (808) 529-0866 Fax: (808) 529-0884
http://www.tsdye.com
[[alternative HTML version deleted]]
______________________________________________
R-help at r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.