An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20131122/8778108b/attachment.pl>
averaging rows on a data.frame according to a factor
5 messages · john d, David Winsemius, Rui Barradas +1 more
On Nov 22, 2013, at 1:43 PM, john d wrote:
Dear all,
I apologize for the newbie question, but I'm stuck.
I have a data frame in the following form:
dat<-as.data.frame(cbind(c("a","a","a","b","b"), c(1,2,3,3,2),c(4,3,5,4,4)))
I need a way to generate a new dataframe with the average for each factor.
The result should look like:
Well, using the data,frame(cbind(...)) will ensure that you will NOT get factors, since cbind creates a matrix and that structure will not hold factors.
res<-as.data.frame(cbind(c("a","b"), c(2,2.5),c(4,4)))
Ouch.
Look at ?tapply or ?aggregate.
Perhaps:
dat<-data.frame(facts= c("a","a","a","b","b"), nums1=c(1,2,3,3,2),nums2=c(4,3,5,4,4))
aggregate(dat[-1], dat[1], mean)
Any help would be greatly appreciated. Jonathan [[alternative HTML version deleted]]
Newbie or not, you should still read the Posting Guide.
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
David Winsemius Alameda, CA, USA
Hello, Try the following. aggregate(cbind(V2, V3) ~ V1, dat, FUN = mean) Hope this helps, Rui Barradas Em 22-11-2013 21:43, john d escreveu:
Dear all,
I apologize for the newbie question, but I'm stuck.
I have a data frame in the following form:
dat<-as.data.frame(cbind(c("a","a","a","b","b"), c(1,2,3,3,2),c(4,3,5,4,4)))
I need a way to generate a new dataframe with the average for each factor.
The result should look like:
res<-as.data.frame(cbind(c("a","b"), c(2,2.5),c(4,4)))
Any help would be greatly appreciated.
Jonathan
[[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.
Sorry, there's a bug in my previous answer.
dat <- data.frame(c("a","a","a","b","b"), c(1,2,3,3,2), c(4,3,5,4,4))
aggregate(as.matrix(dat[,-1]) ~ dat[,1], FUN = mean)
Don't use as.data.frame(cbind(...)), everything becomes factors.
Rui Barradas
Em 22-11-2013 23:02, Rui Barradas escreveu:
Hello, Try the following. aggregate(cbind(V2, V3) ~ V1, dat, FUN = mean) Hope this helps, Rui Barradas Em 22-11-2013 21:43, john d escreveu:
Dear all,
I apologize for the newbie question, but I'm stuck.
I have a data frame in the following form:
dat<-as.data.frame(cbind(c("a","a","a","b","b"),
c(1,2,3,3,2),c(4,3,5,4,4)))
I need a way to generate a new dataframe with the average for each
factor.
The result should look like:
res<-as.data.frame(cbind(c("a","b"), c(2,2.5),c(4,4)))
Any help would be greatly appreciated.
Jonathan
[[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.
______________________________________________ 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.
Hi,
dat<-as.data.frame(cbind(c("a","a","a","b","b"), c(1,2,3,3,2),c(4,3,5,4,4)))
?str(dat)
#'data.frame':??? 5 obs. of? 3 variables:
# $ V1: Factor w/ 2 levels "a","b": 1 1 1 2 2
# $ V2: Factor w/ 3 levels "1","2","3": 1 2 3 3 2
# $ V3: Factor w/ 3 levels "3","4","5": 2 1 3 2 2
#better way would be
dat<-data.frame(V1=c("a","a","a","b","b"), V2=c(1,2,3,3,2),V3=c(4,3,5,4,4))
?str(dat)
#'data.frame':??? 5 obs. of? 3 variables:
# $ V1: Factor w/ 2 levels "a","b": 1 1 1 2 2
# $ V2: num? 1 2 3 3 2
# $ V3: num? 4 3 5 4 4
library(plyr)
?ddply(dat,.(V1),colwise(mean))
#or
?aggregate(.~V1,data=dat,mean)
A.K.
On Friday, November 22, 2013 5:45 PM, john d <dobzhanski at gmail.com> wrote:
Dear all,
I apologize for the newbie question, but I'm stuck.
I have a data frame in the following form:
dat<-as.data.frame(cbind(c("a","a","a","b","b"), c(1,2,3,3,2),c(4,3,5,4,4)))
I need a way to generate a new dataframe with the average for each factor.
The result should look like:
res<-as.data.frame(cbind(c("a","b"), c(2,2.5),c(4,4)))
Any help would be greatly appreciated.
Jonathan
??? [[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.