Hi all,
I'm trying to compute a mean on my data but I'm struggling with 2
things: 1. getting the right layout and 2. including the missing values
in the outcome.
#Input data:
Stock <- c("A", "A", "A", "A", "A", "A", "B", "B", "B", "B", "B", "B")
Soil <- c("Blank", "Blank", "Control", "Control", "Clay", "Clay",
"Blank", "Blank", "Control", "Control", "Clay", "Clay")
Nitrogen <- c(NA, NA, 0, 0, 20, 20, NA, NA, 0, 0, 20, 20)
Respiration <- c(112, 113, 124, 126, 139, 137, 109, 111, 122, 124, 134, 136)
d <- as.data.frame(cbind(Stock, Soil, Nitrogen, Respiration))
#Outcome I'd like to get:
Stockr <- c("A", "A", "A", "B", "B", "B")
Soilr <- c("Blank", "Control", "Clay", "Blank", "Control", "Clay")
Nitrogenr <- c(NA, 0, 20, NA, 0, 20)
Respirationr <- c(111, 125, 138, 110, 123, 135)
result <- as.data.frame(cbind(Stockr, Soilr, Nitrogenr, Respirationr))
Many thanks in advance for your help!
Cheers,
Bea
aggregate()?
5 messages · Beatriz González Domínguez, Rui Barradas, John Kane +2 more
Hello, First of all avoid as.data.frame(cbind(...)). cbind() returns a matrix and since you are mixing numbers with characters, all of the matrix elements become character. Then as.data.frame transforms everything into factors. The correct way is d <- data.frame(Stock, Soil, Nitrogen, Respiration) As for your question, try the following. r1 <- aggregate(Respiration ~ Soil + Stock, data = d, mean) r2 <- aggregate(Nitrogen ~ Soil + Stock, data = d, mean) merge(r1, r2, all = TRUE) Hope this helps, Rui Barradas Em 02-02-2014 12:32, Beatriz R. Gonzalez Dominguez escreveu:
Hi all,
I'm trying to compute a mean on my data but I'm struggling with 2
things: 1. getting the right layout and 2. including the missing values
in the outcome.
#Input data:
Stock <- c("A", "A", "A", "A", "A", "A", "B", "B", "B", "B", "B", "B")
Soil <- c("Blank", "Blank", "Control", "Control", "Clay", "Clay",
"Blank", "Blank", "Control", "Control", "Clay", "Clay")
Nitrogen <- c(NA, NA, 0, 0, 20, 20, NA, NA, 0, 0, 20, 20)
Respiration <- c(112, 113, 124, 126, 139, 137, 109, 111, 122, 124, 134,
136)
d <- as.data.frame(cbind(Stock, Soil, Nitrogen, Respiration))
#Outcome I'd like to get:
Stockr <- c("A", "A", "A", "B", "B", "B")
Soilr <- c("Blank", "Control", "Clay", "Blank", "Control", "Clay")
Nitrogenr <- c(NA, 0, 20, NA, 0, 20)
Respirationr <- c(111, 125, 138, 110, 123, 135)
result <- as.data.frame(cbind(Stockr, Soilr, Nitrogenr, Respirationr))
Many thanks in advance for your help!
Cheers,
Bea
______________________________________________ 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.
Not exactly the order you specified but otherwise I think this works. library(plyr) d <- data.frame(Stock, Soil, Nitrogen, Respiration) ddply(d, .(Soil, Stock), summarize, mean(Nitrogen), mean(Respiration)) John Kane Kingston ON Canada
-----Original Message-----
From: aguitatierra at hotmail.com
Sent: Sun, 2 Feb 2014 13:32:57 +0100
To: r-help at r-project.org
Subject: [R] aggregate()?
Hi all,
I'm trying to compute a mean on my data but I'm struggling with 2
things: 1. getting the right layout and 2. including the missing values
in the outcome.
#Input data:
Stock <- c("A", "A", "A", "A", "A", "A", "B", "B", "B", "B", "B", "B")
Soil <- c("Blank", "Blank", "Control", "Control", "Clay", "Clay",
"Blank", "Blank", "Control", "Control", "Clay", "Clay")
Nitrogen <- c(NA, NA, 0, 0, 20, 20, NA, NA, 0, 0, 20, 20)
Respiration <- c(112, 113, 124, 126, 139, 137, 109, 111, 122, 124, 134,
136)
d <- as.data.frame(cbind(Stock, Soil, Nitrogen, Respiration))
#Outcome I'd like to get:
Stockr <- c("A", "A", "A", "B", "B", "B")
Soilr <- c("Blank", "Control", "Clay", "Blank", "Control", "Clay")
Nitrogenr <- c(NA, 0, 20, NA, 0, 20)
Respirationr <- c(111, 125, 138, 110, 123, 135)
result <- as.data.frame(cbind(Stockr, Soilr, Nitrogenr, Respirationr))
Many thanks in advance for your help!
Cheers,
Bea
______________________________________________ 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.
____________________________________________________________ GET FREE SMILEYS FOR YOUR IM & EMAIL - Learn more at http://www.inbox.com/smileys Works with AIM?, MSN? Messenger, Yahoo!? Messenger, ICQ?, Google Talk? and most webmails
Also, ?with(d,aggregate(cbind(Nitrogenr=Nitrogen,Respirationr=Respiration),by=list(Soilr=Soil,Stockr=Stock),FUN=mean)) A.K.
On Sunday, February 2, 2014 7:58 AM, Rui Barradas <ruipbarradas at sapo.pt> wrote:
Hello, First of all avoid as.data.frame(cbind(...)). cbind() returns a matrix and since you are mixing numbers with characters, all of the matrix elements become character. Then as.data.frame transforms everything into factors. The correct way is d <- data.frame(Stock, Soil, Nitrogen, Respiration) As for your question, try the following. r1 <- aggregate(Respiration ~ Soil + Stock, data = d, mean) r2 <- aggregate(Nitrogen ~ Soil + Stock, data = d, mean) merge(r1, r2, all = TRUE) Hope this helps, Rui Barradas Em 02-02-2014 12:32, Beatriz R. Gonzalez Dominguez escreveu:
Hi all,
I'm trying to compute a mean on my data but I'm struggling with 2
things: 1. getting the right layout and 2. including the missing values
in the outcome.
#Input data:
Stock <- c("A", "A", "A", "A", "A", "A", "B", "B", "B", "B", "B", "B")
Soil <- c("Blank", "Blank", "Control", "Control", "Clay", "Clay",
"Blank", "Blank", "Control", "Control", "Clay", "Clay")
Nitrogen <- c(NA, NA, 0, 0, 20, 20, NA, NA, 0, 0, 20, 20)
Respiration <- c(112, 113, 124, 126, 139, 137, 109, 111, 122, 124, 134,
136)
d <- as.data.frame(cbind(Stock, Soil, Nitrogen, Respiration))
#Outcome I'd like to get:
Stockr <- c("A", "A", "A", "B", "B", "B")
Soilr <- c("Blank", "Control", "Clay", "Blank", "Control", "Clay")
Nitrogenr <- c(NA, 0, 20, NA, 0, 20)
Respirationr <- c(111, 125, 138, 110, 123, 135)
result <- as.data.frame(cbind(Stockr, Soilr, Nitrogenr, Respirationr))
Many thanks in advance for your help!
Cheers,
Bea
______________________________________________ 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.
On Feb 2, 2014, at 8:43 AM, arun wrote:
Also, with(d,aggregate(cbind(Nitrogenr=Nitrogen,Respirationr=Respiration),by=list(Soilr=Soil,Stockr=Stock),FUN=mean))
Did you compare your output to the input?
David.
> A.K.
>
> On Sunday, February 2, 2014 7:58 AM, Rui Barradas <ruipbarradas at sapo.pt> wrote:
> Hello,
>
> First of all avoid as.data.frame(cbind(...)). cbind() returns a matrix
> and since you are mixing numbers with characters, all of the matrix
> elements become character. Then as.data.frame transforms everything into
> factors. The correct way is
>
> d <- data.frame(Stock, Soil, Nitrogen, Respiration)
>
>
> As for your question, try the following.
>
> r1 <- aggregate(Respiration ~ Soil + Stock, data = d, mean)
> r2 <- aggregate(Nitrogen ~ Soil + Stock, data = d, mean)
>
> merge(r1, r2, all = TRUE)
>
>
> Hope this helps,
>
> Rui Barradas
>
> Em 02-02-2014 12:32, Beatriz R. Gonzalez Dominguez escreveu:
>> Hi all,
>>
>> I'm trying to compute a mean on my data but I'm struggling with 2
>> things: 1. getting the right layout and 2. including the missing values
>> in the outcome.
>>
>> #Input data:
>> Stock <- c("A", "A", "A", "A", "A", "A", "B", "B", "B", "B", "B", "B")
>> Soil <- c("Blank", "Blank", "Control", "Control", "Clay", "Clay",
>> "Blank", "Blank", "Control", "Control", "Clay", "Clay")
>> Nitrogen <- c(NA, NA, 0, 0, 20, 20, NA, NA, 0, 0, 20, 20)
>> Respiration <- c(112, 113, 124, 126, 139, 137, 109, 111, 122, 124, 134,
>> 136)
>> d <- as.data.frame(cbind(Stock, Soil, Nitrogen, Respiration))
>>
>> #Outcome I'd like to get:
>> Stockr <- c("A", "A", "A", "B", "B", "B")
>> Soilr <- c("Blank", "Control", "Clay", "Blank", "Control", "Clay")
>> Nitrogenr <- c(NA, 0, 20, NA, 0, 20)
>> Respirationr <- c(111, 125, 138, 110, 123, 135)
>> result <- as.data.frame(cbind(Stockr, Soilr, Nitrogenr, Respirationr))
>>
>> Many thanks in advance for your help!
>>
>> Cheers,
>>
>> Bea
>>
>> ______________________________________________
>> 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.
>
>
> ______________________________________________
> 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.
David Winsemius
Alameda, CA, USA