I have a dataset where the same effect was measured in different ways and I want to compare those measurements. My dataset looks like this:
Study MType ID Insect Mean Sd N
Alla Fecundity 1 Aphid .62 .7628 11
Alla RGR 1 Aphid -32.8 7.76 11
Ando Survival 2 Bee 2.34 .67 8
Ando RGR 2 Bee 4.56 .34 10
Ando Fecundity 2 Bee 5.32 4.3 20
I want to combine the rows by ID number so that the MType, Mean, Sd and N for each row are preserved (although the column names need to change so the columns are distinguishable).
Hopefully, in the end it would look like:
Study ID Insect Fecundity.mean Fecundity.Sd Fecundity.N RGR.mean RGR.Sd...etc
Some difficulties:
I have messed around with reshape and with tidyr and I haven't been able to figure out how to do this with either of them. Please help!
You can use reshape
via base R. You want to transform your data from long to wide format according to this post: How to reshape data from long to wide format?.
If your data is in a data.frame
d:
reshape(d, idvar=c("ID", "Study", "Insect"), timevar = "MType", direction="wide")
Results:
Study ID Insect Mean.Fecundity Sd.Fecundity N.Fecundity Mean.RGR Sd.RGR N.RGR Mean.Survival Sd.Survival N.Survival
1 Alla 1 Aphid 0.62 0.7628 11 -32.80 7.76 11 NA NA NA
3 Ando 2 Bee 5.32 4.3000 20 4.56 0.34 10 2.34 0.67 8
Doing this with tidyr
is not obvious, because you have to first gather()
and then spread()
.
library(tidyverse)
example <- tribble(
~Study, ~MType, ~ID, ~Insect, ~Mean, ~Sd, ~N,
"Alla", "Fecundity", 1, "Aphid", .62, .7628, 11,
"Alla", "RGR", 1, "Aphid", -32.8, 7.76, 11,
"Ando", "Survival", 2, "Bee", 2.34, .67, 8,
"Ando", "RGR", 2, "Bee", 4.56, .34, 10,
"Ando", "Fecundity", 2, "Bee", 5.32, 4.3, 20)
gather(example, key = "Statistic", value = "value", Mean, Sd, N) %>%
unite(col="MType.Statistic", MType, Statistic, sep = ".") %>%
spread(key = MType.Statistic, value=value)
#> # A tibble: 2 x 12
#> Study ID Insect Fecundity.Mean Fecundity.N Fecundity.Sd RGR.Mean
#> * <chr> <dbl> <chr> <dbl> <dbl> <dbl> <dbl>
#> 1 Alla 1.00 Aphid 0.620 11.0 0.763 -32.8
#> 2 Ando 2.00 Bee 5.32 20.0 4.30 4.56
#> # ... with 5 more variables: RGR.N <dbl>, RGR.Sd <dbl>,
#> # Survival.Mean <dbl>, Survival.N <dbl>, Survival.Sd <dbl>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With