[R] R- transform data frame into matrix
Dieter Menne
dieter.menne at menne-biomed.de
Wed Nov 12 18:01:20 CET 2008
Thorsten Raff <t.raff <at> med2.uni-kiel.de> writes:
> I have the problem that I want to transform a dataframe as generated by
>
> diagnosis <- rep(diagnosis[1:3], 3)
> marker <- gl(3,3)
> values <- rnorm(9)
> dataframe <- cbind(diagnosis, marker, values)
> dataframe <- dataframe[c(1:5, 7:9), ]
>
> into a matrix where levels(diagnosis) is indicating the rows of the matrix,
> levels(marker) the columns and values are the actual content of the matrix.
> However, as can been seen in the dataframe, some observations are missing and
> should result in <NAs> in the resulting matrix, giving a result like this:
>
> marker 1 2 3
> diagnosis1 value value value
> diagnosis2 value value value
> diagnosis3 value NA value
>
You can make your examples self-running by providing fake data for diagnosis,
e.g. using letters[] instead of diagnosis. In addition, note that your cbind has
an awkward side effect by converting everything to character as the least common
denominator for the variables in a matrix.
For real work, use reshape with its frightening number of parameters. If you
don't understand that function at the seventh reading, stay cool: it's not your
fault. You might also try package reshape, but it is not much easier for
occasional use.
Dieter
#
diagnosis <- as.factor(rep(letters[1:3], 3))
marker <- as.factor(gl(3,3))
values <- rnorm(9)
dataframe <- data.frame(diagnosis=diagnosis, marker=marker, values=values)
dataframe <- dataframe[c(1:5, 7:9), ]
reshape(dataframe,idvar="diagnosis",direction="wide",timevar="marker")
More information about the R-help
mailing list