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@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@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.

Reply via email to