Hi,
Try:
example <- read.table(text="ID Sex Location CL
1?? F??? lake1?? 40
1?? F??? lake1???
1?? F??? lake1???? 43
2?? M??? lake1??? 30
3?? M??? lake2??? 22
4?? F??? lake2???? 25
4?? F??? lake2????
27",sep="",header=TRUE,stringsAsFactors=FALSE,fill=TRUE)
aggregate(CL~.,example,mean,na.rm=TRUE)
#or
library(plyr)
ddply(example,.(ID,Sex,Location),summarize,CL=mean(CL,na.rm=TRUE))
#or from `result`
?res <-
setNames(cbind(expand.grid(dimnames(result),stringsAsFactors=FALSE),as.data.frame(as.matrix(result))),c("Location","Sex","ID","CL"))
?res[!is.na(res$CL),c(3,2,1,4)]
###It would be better to store the results in a data.frame than in a matrix for
this case.
A.K.
I have a table with three categorical columns (ID, Sex, Location) and a
measurement column (CL). These are measurements from individuals in a
study. Some individuals were measured more than once and thus have
multiple rows. For those individuals, I need to take an average of all
of their measurements so that I can run statistical tests without having
pseudoreplication. Below is an example table with the code that I am
using, the results that I am getting, and the results that I want (I am
calling the table "example").
?
ID Sex Location CL
1 ? F ? ?lake1 ? ? 40
1 ? F ? ?lake1 ? ?
1 ? F ? ?lake1 ? ? 43
2 ? M ? ?lake1 ? ?30
3 ? M ? ?lake2 ? ?22
4 ? F ? ?lake2 ? ? 25
4 ? F ? ?lake2 ? ? 27
> result <- with(example, tapply(CL, list(Location, Sex, ID), mean,
na.rm=T))
this almost does what I want. I takes the mean for each ID, and
retains its relationship to the categorical variables, the problem is
the output looks like this:
, , 1
? ? ? ? ? ? ?F M
lake1 41.66667 ?
lake2 ? ? ? ? ?
, , 2
? ? ? F ? ? ? ?M
lake1 ? 30.00000
lake2 ? ? ? ? ?
, , 3
? ? ? F ? ? ? ?M
lake1 ? ? ? ? ?
lake2 ? 22.00000
, , 4
? ? ? ? ? ? ?F M
lake1 ? ? ? ? ?
lake2 26.00000 ?
How do I get those results back into a single table like I
originally had. In other words, I want a table that looks like this: ?
ID Sex Location CL
1 ? F ? ?lake1 ? ? 41.66667
2 ? M ? ?lake1 ? ?30
3 ? M ? ?lake2 ? ?22
4 ? F ? ?lake2 ? ? 26.00000
?
Thanks for the help!