你可以像这样使用dplyr:
library(dplyr)
df %>%
group_by(Date) %>%
summarize(mean = mean(Canopyheight)) %>%
mutate(group = rep(c("pre", "post"), each = 2)) %>%
group_by(group) %>%
summarize(mean = mean(mean))
#> # A tibble: 2 x 2
#> group mean
#> <chr> <dbl>
#> 1 post 78.5
#> 2 pre 73.5
由reprex package (v0.3.0) 于 2020 年 2 月 20 日创建
基于来自 OP 的进一步数据,使该解决方案更通用:
library(dplyr)
df <- structure(list(Plot = c("TF_103B1", "TF_103B1", "TF_103B1", "TF_103B1",
"TF_103B1", "TF_103B1", "TF_103B1", "TF_103B1", "TF_103B1", "TF_103B1",
"TF_103B1", "TF_103B1", "TF_103B1", "TF_103B1", "TF_103B1", "TF_103B1",
"TF_103B1", "TF_103B1", "TF_103B1", "TF_103B1", "TF_103B1", "TF_103B1",
"TF_103B1", "TF_103B1", "TF_103B1", "TF_103B1", "TF_103B1", "TF_103B1",
"TF_103B1", "TF_103B1", "TF_103B1", "TF_103B1", "TF_103B1", "TF_103B1",
"TF_103B1", "TF_103B1", "TF_103B1", "TF_103B1", "TF_103B1", "TF_103B1",
"TF_103B1", "TF_103B1"), Date = structure(c(18217, 18217, 18217,
18217, 18218, 18218, 18218, 18218, 18219, 18219, 18219, 18219,
18220, 18221, 18221, 18221, 18221, 18222, 18222, 18222, 18222,
18246, 18246, 18246, 18246, 18247, 18247, 18247, 18247, 18248,
18248, 18248, 18248, 18249, 18250, 18250, 18250, 18250, 18251,
18251, 18251, 18251), class = "Date"), Time = c("1", "4", "6",
"22", "1", "4", "6", "22", "1", "4", "6", "22", "22", "1", "4",
"6", "22", "1", "4", "6", "22", "1", "4", "6", "22", "1", "4",
"6", "22", "1", "4", "6", "22", "22", "1", "4", "6", "22", "1",
"4", "6", "22"), Canopyheight = c(2064.55, 2064.51, 2063.03,
2063.62, 2065.94, 2064.83, 2061.58, 2064.07, 2066.97, 2063.99,
2065.37, 2064.7, 2067.8, 2065.6, 2067.05, 2064.95, 2075.76, 2073.06,
2079.23, 2072.75, 2068.81, 2065.66, 2065.85, 2065.65, 2063.65,
2063.44, 2068.05, 2072.38, 2067.2, 2068.1, 2067.26, 2069.27,
2063.05, 2088.45, 2086.24, 2088.91, 2092.04, 2092, 2092.67, 2090.7,
2091.59, 2090.99)), row.names = c(NA, 42L), class = "data.frame")
df <- df %>%
group_by(Date) %>%
summarize(mean = mean(Canopyheight)) %>%
mutate(prepost = rep(rep(c("pre", "post"), each = 3), length.out = n()))
df$start_date <- rep(df$Date[seq(nrow(df)) %% 6 == 0], each = 6)
df %>%
group_by(start_date, prepost) %>%
summarize(mean = mean(mean))
#> # A tibble: 4 x 3
#> # Groups: start_date [2]
#> start_date prepost mean
#> <date> <chr> <dbl>
#> 1 2019-11-22 post 2070.
#> 2 2019-11-22 pre 2064.
#> 3 2019-12-21 post 2090.
#> 4 2019-12-21 pre 2067.
由reprex package (v0.3.0) 于 2020 年 2 月 21 日创建