R 如何通过变量在聚合中保留名称

R 如何通过变量在聚合中保留名称,r,R,下面是一个示例和自解释的案例,以及所需的解决方案: set.seed(123) df <- data.frame(s=rnorm(100), g1=seq(1,100,,100),g2=seq(5,100,,100),g3=seq(10,1,,100)) agg <- with(df, aggregate(s, data.frame(g1,g2,g3), FUN = function(x) c("mean" = mean(

下面是一个示例和自解释的案例,以及所需的解决方案:

 set.seed(123)
 df <- data.frame(s=rnorm(100), g1=seq(1,100,,100),g2=seq(5,100,,100),g3=seq(10,1,,100))
 agg <- with(df, aggregate(s, data.frame(g1,g2,g3), 
                 FUN = function(x) c("mean" = mean(x), "median" = median(x))))
 head(agg,5)

       g1        g2       g3     x.mean   x.median
1 100 100.00000 1.000000 -1.0264209 -1.0264209
2  99  99.04040 1.090909 -0.2357004 -0.2357004
3  98  98.08081 1.181818  1.5326106  1.5326106
4  97  97.12121 1.272727  2.1873330  2.1873330
5  96  96.16162 1.363636 -0.6002596 -0.6002596

如果分组应该是分开的,我们可以使用
lappy
在“g”列上循环,分别应用
aggregate
并将它们与
cbind

nm1 <- paste0('g', 1:3)
out1 <- do.call(cbind, lapply(nm1, function(g)       {
   out <- do.call(data.frame, aggregate(s ~ .,  df[c('s', g)],
        FUN = function(x) c(mean(x), median(x))))
    names(out)[-1] <- paste0(g, c('.x.mean', '.x.median'))
   out}))

 out1 <-  out1[c(nm1, setdiff(names(out1), nm1))]

或者如
tidyverse
中所述,如果每个
unique
组的数量不同,则可以使用
ave
创建列,然后应用
unique

out1 <- unique(cbind(df[nm1], do.call(cbind, lapply(nm1, function(g) {
                 mean <- with(df, ave(s, df[[g]]))
                 median <- with(df, ave(s, df[[g]], FUN = median))
                 setNames(data.frame(mean, median),
                       paste0(g, c('.x.mean', '.x.median')))
                       
                       }))))

或者使用
tidyese

library(dplyr) # version >= 1.0
library(purrr)
library(stringr)
map_dfc(nm1, ~ df %>% 
      group_by(across(all_of(.x))) %>%
      summarise(!! str_c(.x, ".x.mean") := mean(s),
        !! str_c(.x, ".x.median") := median(s), .groups = 'drop')) %>% 
    select(all_of(nm1), everything())
-输出

head(out1)
#  g1       g2       g3   g1.x.mean g1.x.median   g2.x.mean g2.x.median  g3.x.mean g3.x.median
#1  1 5.000000 1.000000 -0.56047565 -0.56047565 -0.56047565 -0.56047565 -1.0264209  -1.0264209
#2  2 5.959596 1.090909 -0.23017749 -0.23017749 -0.23017749 -0.23017749 -0.2357004  -0.2357004
#3  3 6.919192 1.181818  1.55870831  1.55870831  1.55870831  1.55870831  1.5326106   1.5326106
#4  4 7.878788 1.272727  0.07050839  0.07050839  0.07050839  0.07050839  2.1873330   2.1873330
#5  5 8.838384 1.363636  0.12928774  0.12928774  0.12928774  0.12928774 -0.6002596  -0.6002596
#6  6 9.797980 1.454545  1.71506499  1.71506499  1.71506499  1.71506499  1.3606524   1.3606524
head(out1)
#  g1       g2        g3   g1.x.mean g1.x.median   g2.x.mean g2.x.median   g3.x.mean g3.x.median
#1  1 5.000000 10.000000 -0.56047565 -0.56047565 -0.56047565 -0.56047565 -0.56047565 -0.56047565
#2  2 5.959596  9.909091 -0.23017749 -0.23017749 -0.23017749 -0.23017749 -0.23017749 -0.23017749
#3  3 6.919192  9.818182  1.55870831  1.55870831  1.55870831  1.55870831  1.55870831  1.55870831
#4  4 7.878788  9.727273  0.07050839  0.07050839  0.07050839  0.07050839  0.07050839  0.07050839
#5  5 8.838384  9.636364  0.12928774  0.12928774  0.12928774  0.12928774  0.12928774  0.12928774
#6  6 9.797980  9.545455  1.71506499  1.71506499  1.71506499  1.71506499  1.71506499  1.71506499                           
# A tibble: 100 x 9
#      g1    g2    g3 g1.x.mean g1.x.median g2.x.mean g2.x.median g3.x.mean g3.x.median
#   <dbl> <dbl> <dbl>     <dbl>       <dbl>     <dbl>       <dbl>     <dbl>       <dbl>
# 1     1  5     1      -0.560      -0.560    -0.560      -0.560     -1.03       -1.03 
# 2     2  5.96  1.09   -0.230      -0.230    -0.230      -0.230     -0.236      -0.236
# 3     3  6.92  1.18    1.56        1.56      1.56        1.56       1.53        1.53 
# 4     4  7.88  1.27    0.0705      0.0705    0.0705      0.0705     2.19        2.19 
# 5     5  8.84  1.36    0.129       0.129     0.129       0.129     -0.600      -0.600
# 6     6  9.80  1.45    1.72        1.72      1.72        1.72       1.36        1.36 
# 7     7 10.8   1.55    0.461       0.461     0.461       0.461     -0.628      -0.628
# 8     8 11.7   1.64   -1.27       -1.27     -1.27       -1.27       0.239       0.239
# 9     9 12.7   1.73   -0.687      -0.687    -0.687      -0.687      0.548       0.548
#10    10 13.6   1.82   -0.446      -0.446    -0.446      -0.446      0.994       0.994
# … with 90 more rows
# A tibble: 100 x 9
#      g1    g2    g3 g1.x.mean g1.x.median g2.x.mean g2.x.median g3.x.mean g3.x.median
#   <dbl> <dbl> <dbl>     <dbl>       <dbl>     <dbl>       <dbl>     <dbl>       <dbl>
# 1     1  5    10      -0.560      -0.560    -0.560      -0.560    -0.560      -0.560 
# 2     2  5.96  9.91   -0.230      -0.230    -0.230      -0.230    -0.230      -0.230 
# 3     3  6.92  9.82    1.56        1.56      1.56        1.56      1.56        1.56  
# 4     4  7.88  9.73    0.0705      0.0705    0.0705      0.0705    0.0705      0.0705
# 5     5  8.84  9.64    0.129       0.129     0.129       0.129     0.129       0.129 
# 6     6  9.80  9.55    1.72        1.72      1.72        1.72      1.72        1.72  
# 7     7 10.8   9.45    0.461       0.461     0.461       0.461     0.461       0.461 
# 8     8 11.7   9.36   -1.27       -1.27     -1.27       -1.27     -1.27       -1.27  
# 9     9 12.7   9.27   -0.687      -0.687    -0.687      -0.687    -0.687      -0.687 
#10    10 13.6   9.18   -0.446      -0.446    -0.446      -0.446    -0.446      -0.446 
# … with 90 more rows
-输出

head(out1)
#  g1       g2       g3   g1.x.mean g1.x.median   g2.x.mean g2.x.median  g3.x.mean g3.x.median
#1  1 5.000000 1.000000 -0.56047565 -0.56047565 -0.56047565 -0.56047565 -1.0264209  -1.0264209
#2  2 5.959596 1.090909 -0.23017749 -0.23017749 -0.23017749 -0.23017749 -0.2357004  -0.2357004
#3  3 6.919192 1.181818  1.55870831  1.55870831  1.55870831  1.55870831  1.5326106   1.5326106
#4  4 7.878788 1.272727  0.07050839  0.07050839  0.07050839  0.07050839  2.1873330   2.1873330
#5  5 8.838384 1.363636  0.12928774  0.12928774  0.12928774  0.12928774 -0.6002596  -0.6002596
#6  6 9.797980 1.454545  1.71506499  1.71506499  1.71506499  1.71506499  1.3606524   1.3606524
head(out1)
#  g1       g2        g3   g1.x.mean g1.x.median   g2.x.mean g2.x.median   g3.x.mean g3.x.median
#1  1 5.000000 10.000000 -0.56047565 -0.56047565 -0.56047565 -0.56047565 -0.56047565 -0.56047565
#2  2 5.959596  9.909091 -0.23017749 -0.23017749 -0.23017749 -0.23017749 -0.23017749 -0.23017749
#3  3 6.919192  9.818182  1.55870831  1.55870831  1.55870831  1.55870831  1.55870831  1.55870831
#4  4 7.878788  9.727273  0.07050839  0.07050839  0.07050839  0.07050839  0.07050839  0.07050839
#5  5 8.838384  9.636364  0.12928774  0.12928774  0.12928774  0.12928774  0.12928774  0.12928774
#6  6 9.797980  9.545455  1.71506499  1.71506499  1.71506499  1.71506499  1.71506499  1.71506499                           
# A tibble: 100 x 9
#      g1    g2    g3 g1.x.mean g1.x.median g2.x.mean g2.x.median g3.x.mean g3.x.median
#   <dbl> <dbl> <dbl>     <dbl>       <dbl>     <dbl>       <dbl>     <dbl>       <dbl>
# 1     1  5     1      -0.560      -0.560    -0.560      -0.560     -1.03       -1.03 
# 2     2  5.96  1.09   -0.230      -0.230    -0.230      -0.230     -0.236      -0.236
# 3     3  6.92  1.18    1.56        1.56      1.56        1.56       1.53        1.53 
# 4     4  7.88  1.27    0.0705      0.0705    0.0705      0.0705     2.19        2.19 
# 5     5  8.84  1.36    0.129       0.129     0.129       0.129     -0.600      -0.600
# 6     6  9.80  1.45    1.72        1.72      1.72        1.72       1.36        1.36 
# 7     7 10.8   1.55    0.461       0.461     0.461       0.461     -0.628      -0.628
# 8     8 11.7   1.64   -1.27       -1.27     -1.27       -1.27       0.239       0.239
# 9     9 12.7   1.73   -0.687      -0.687    -0.687      -0.687      0.548       0.548
#10    10 13.6   1.82   -0.446      -0.446    -0.446      -0.446      0.994       0.994
# … with 90 more rows
# A tibble: 100 x 9
#      g1    g2    g3 g1.x.mean g1.x.median g2.x.mean g2.x.median g3.x.mean g3.x.median
#   <dbl> <dbl> <dbl>     <dbl>       <dbl>     <dbl>       <dbl>     <dbl>       <dbl>
# 1     1  5    10      -0.560      -0.560    -0.560      -0.560    -0.560      -0.560 
# 2     2  5.96  9.91   -0.230      -0.230    -0.230      -0.230    -0.230      -0.230 
# 3     3  6.92  9.82    1.56        1.56      1.56        1.56      1.56        1.56  
# 4     4  7.88  9.73    0.0705      0.0705    0.0705      0.0705    0.0705      0.0705
# 5     5  8.84  9.64    0.129       0.129     0.129       0.129     0.129       0.129 
# 6     6  9.80  9.55    1.72        1.72      1.72        1.72      1.72        1.72  
# 7     7 10.8   9.45    0.461       0.461     0.461       0.461     0.461       0.461 
# 8     8 11.7   9.36   -1.27       -1.27     -1.27       -1.27     -1.27       -1.27  
# 9     9 12.7   9.27   -0.687      -0.687    -0.687      -0.687    -0.687      -0.687 
#10    10 13.6   9.18   -0.446      -0.446    -0.446      -0.446    -0.446      -0.446 
# … with 90 more rows
#一个tible:100 x 9
#g1 g2 g3 g1.x.平均值g1.x.中值g2.x.平均值g2.x.中值g3.x.平均值g3.x.中值
#                                         
# 1     1  5    10      -0.560      -0.560    -0.560      -0.560    -0.560      -0.560 
# 2     2  5.96  9.91   -0.230      -0.230    -0.230      -0.230    -0.230      -0.230 
# 3     3  6.92  9.82    1.56        1.56      1.56        1.56      1.56        1.56  
# 4     4  7.88  9.73    0.0705      0.0705    0.0705      0.0705    0.0705      0.0705
# 5     5  8.84  9.64    0.129       0.129     0.129       0.129     0.129       0.129 
# 6     6  9.80  9.55    1.72        1.72      1.72        1.72      1.72        1.72  
# 7     7 10.8   9.45    0.461       0.461     0.461       0.461     0.461       0.461 
# 8     8 11.7   9.36   -1.27       -1.27     -1.27       -1.27     -1.27       -1.27  
# 9     9 12.7   9.27   -0.687      -0.687    -0.687      -0.687    -0.687      -0.687 
#10    10 13.6   9.18   -0.446      -0.446    -0.446      -0.446    -0.446      -0.446 
#…还有90行

如果分组应该是分开的,我们可以使用
lappy
在“g”列上循环,分别应用
聚合
,并将它们与
cbind

nm1 <- paste0('g', 1:3)
out1 <- do.call(cbind, lapply(nm1, function(g)       {
   out <- do.call(data.frame, aggregate(s ~ .,  df[c('s', g)],
        FUN = function(x) c(mean(x), median(x))))
    names(out)[-1] <- paste0(g, c('.x.mean', '.x.median'))
   out}))

 out1 <-  out1[c(nm1, setdiff(names(out1), nm1))]

或者如
tidyverse
中所述,如果每个
unique
组的数量不同,则可以使用
ave
创建列,然后应用
unique

out1 <- unique(cbind(df[nm1], do.call(cbind, lapply(nm1, function(g) {
                 mean <- with(df, ave(s, df[[g]]))
                 median <- with(df, ave(s, df[[g]], FUN = median))
                 setNames(data.frame(mean, median),
                       paste0(g, c('.x.mean', '.x.median')))
                       
                       }))))

或者使用
tidyese

library(dplyr) # version >= 1.0
library(purrr)
library(stringr)
map_dfc(nm1, ~ df %>% 
      group_by(across(all_of(.x))) %>%
      summarise(!! str_c(.x, ".x.mean") := mean(s),
        !! str_c(.x, ".x.median") := median(s), .groups = 'drop')) %>% 
    select(all_of(nm1), everything())
-输出

head(out1)
#  g1       g2       g3   g1.x.mean g1.x.median   g2.x.mean g2.x.median  g3.x.mean g3.x.median
#1  1 5.000000 1.000000 -0.56047565 -0.56047565 -0.56047565 -0.56047565 -1.0264209  -1.0264209
#2  2 5.959596 1.090909 -0.23017749 -0.23017749 -0.23017749 -0.23017749 -0.2357004  -0.2357004
#3  3 6.919192 1.181818  1.55870831  1.55870831  1.55870831  1.55870831  1.5326106   1.5326106
#4  4 7.878788 1.272727  0.07050839  0.07050839  0.07050839  0.07050839  2.1873330   2.1873330
#5  5 8.838384 1.363636  0.12928774  0.12928774  0.12928774  0.12928774 -0.6002596  -0.6002596
#6  6 9.797980 1.454545  1.71506499  1.71506499  1.71506499  1.71506499  1.3606524   1.3606524
head(out1)
#  g1       g2        g3   g1.x.mean g1.x.median   g2.x.mean g2.x.median   g3.x.mean g3.x.median
#1  1 5.000000 10.000000 -0.56047565 -0.56047565 -0.56047565 -0.56047565 -0.56047565 -0.56047565
#2  2 5.959596  9.909091 -0.23017749 -0.23017749 -0.23017749 -0.23017749 -0.23017749 -0.23017749
#3  3 6.919192  9.818182  1.55870831  1.55870831  1.55870831  1.55870831  1.55870831  1.55870831
#4  4 7.878788  9.727273  0.07050839  0.07050839  0.07050839  0.07050839  0.07050839  0.07050839
#5  5 8.838384  9.636364  0.12928774  0.12928774  0.12928774  0.12928774  0.12928774  0.12928774
#6  6 9.797980  9.545455  1.71506499  1.71506499  1.71506499  1.71506499  1.71506499  1.71506499                           
# A tibble: 100 x 9
#      g1    g2    g3 g1.x.mean g1.x.median g2.x.mean g2.x.median g3.x.mean g3.x.median
#   <dbl> <dbl> <dbl>     <dbl>       <dbl>     <dbl>       <dbl>     <dbl>       <dbl>
# 1     1  5     1      -0.560      -0.560    -0.560      -0.560     -1.03       -1.03 
# 2     2  5.96  1.09   -0.230      -0.230    -0.230      -0.230     -0.236      -0.236
# 3     3  6.92  1.18    1.56        1.56      1.56        1.56       1.53        1.53 
# 4     4  7.88  1.27    0.0705      0.0705    0.0705      0.0705     2.19        2.19 
# 5     5  8.84  1.36    0.129       0.129     0.129       0.129     -0.600      -0.600
# 6     6  9.80  1.45    1.72        1.72      1.72        1.72       1.36        1.36 
# 7     7 10.8   1.55    0.461       0.461     0.461       0.461     -0.628      -0.628
# 8     8 11.7   1.64   -1.27       -1.27     -1.27       -1.27       0.239       0.239
# 9     9 12.7   1.73   -0.687      -0.687    -0.687      -0.687      0.548       0.548
#10    10 13.6   1.82   -0.446      -0.446    -0.446      -0.446      0.994       0.994
# … with 90 more rows
# A tibble: 100 x 9
#      g1    g2    g3 g1.x.mean g1.x.median g2.x.mean g2.x.median g3.x.mean g3.x.median
#   <dbl> <dbl> <dbl>     <dbl>       <dbl>     <dbl>       <dbl>     <dbl>       <dbl>
# 1     1  5    10      -0.560      -0.560    -0.560      -0.560    -0.560      -0.560 
# 2     2  5.96  9.91   -0.230      -0.230    -0.230      -0.230    -0.230      -0.230 
# 3     3  6.92  9.82    1.56        1.56      1.56        1.56      1.56        1.56  
# 4     4  7.88  9.73    0.0705      0.0705    0.0705      0.0705    0.0705      0.0705
# 5     5  8.84  9.64    0.129       0.129     0.129       0.129     0.129       0.129 
# 6     6  9.80  9.55    1.72        1.72      1.72        1.72      1.72        1.72  
# 7     7 10.8   9.45    0.461       0.461     0.461       0.461     0.461       0.461 
# 8     8 11.7   9.36   -1.27       -1.27     -1.27       -1.27     -1.27       -1.27  
# 9     9 12.7   9.27   -0.687      -0.687    -0.687      -0.687    -0.687      -0.687 
#10    10 13.6   9.18   -0.446      -0.446    -0.446      -0.446    -0.446      -0.446 
# … with 90 more rows
-输出

head(out1)
#  g1       g2       g3   g1.x.mean g1.x.median   g2.x.mean g2.x.median  g3.x.mean g3.x.median
#1  1 5.000000 1.000000 -0.56047565 -0.56047565 -0.56047565 -0.56047565 -1.0264209  -1.0264209
#2  2 5.959596 1.090909 -0.23017749 -0.23017749 -0.23017749 -0.23017749 -0.2357004  -0.2357004
#3  3 6.919192 1.181818  1.55870831  1.55870831  1.55870831  1.55870831  1.5326106   1.5326106
#4  4 7.878788 1.272727  0.07050839  0.07050839  0.07050839  0.07050839  2.1873330   2.1873330
#5  5 8.838384 1.363636  0.12928774  0.12928774  0.12928774  0.12928774 -0.6002596  -0.6002596
#6  6 9.797980 1.454545  1.71506499  1.71506499  1.71506499  1.71506499  1.3606524   1.3606524
head(out1)
#  g1       g2        g3   g1.x.mean g1.x.median   g2.x.mean g2.x.median   g3.x.mean g3.x.median
#1  1 5.000000 10.000000 -0.56047565 -0.56047565 -0.56047565 -0.56047565 -0.56047565 -0.56047565
#2  2 5.959596  9.909091 -0.23017749 -0.23017749 -0.23017749 -0.23017749 -0.23017749 -0.23017749
#3  3 6.919192  9.818182  1.55870831  1.55870831  1.55870831  1.55870831  1.55870831  1.55870831
#4  4 7.878788  9.727273  0.07050839  0.07050839  0.07050839  0.07050839  0.07050839  0.07050839
#5  5 8.838384  9.636364  0.12928774  0.12928774  0.12928774  0.12928774  0.12928774  0.12928774
#6  6 9.797980  9.545455  1.71506499  1.71506499  1.71506499  1.71506499  1.71506499  1.71506499                           
# A tibble: 100 x 9
#      g1    g2    g3 g1.x.mean g1.x.median g2.x.mean g2.x.median g3.x.mean g3.x.median
#   <dbl> <dbl> <dbl>     <dbl>       <dbl>     <dbl>       <dbl>     <dbl>       <dbl>
# 1     1  5     1      -0.560      -0.560    -0.560      -0.560     -1.03       -1.03 
# 2     2  5.96  1.09   -0.230      -0.230    -0.230      -0.230     -0.236      -0.236
# 3     3  6.92  1.18    1.56        1.56      1.56        1.56       1.53        1.53 
# 4     4  7.88  1.27    0.0705      0.0705    0.0705      0.0705     2.19        2.19 
# 5     5  8.84  1.36    0.129       0.129     0.129       0.129     -0.600      -0.600
# 6     6  9.80  1.45    1.72        1.72      1.72        1.72       1.36        1.36 
# 7     7 10.8   1.55    0.461       0.461     0.461       0.461     -0.628      -0.628
# 8     8 11.7   1.64   -1.27       -1.27     -1.27       -1.27       0.239       0.239
# 9     9 12.7   1.73   -0.687      -0.687    -0.687      -0.687      0.548       0.548
#10    10 13.6   1.82   -0.446      -0.446    -0.446      -0.446      0.994       0.994
# … with 90 more rows
# A tibble: 100 x 9
#      g1    g2    g3 g1.x.mean g1.x.median g2.x.mean g2.x.median g3.x.mean g3.x.median
#   <dbl> <dbl> <dbl>     <dbl>       <dbl>     <dbl>       <dbl>     <dbl>       <dbl>
# 1     1  5    10      -0.560      -0.560    -0.560      -0.560    -0.560      -0.560 
# 2     2  5.96  9.91   -0.230      -0.230    -0.230      -0.230    -0.230      -0.230 
# 3     3  6.92  9.82    1.56        1.56      1.56        1.56      1.56        1.56  
# 4     4  7.88  9.73    0.0705      0.0705    0.0705      0.0705    0.0705      0.0705
# 5     5  8.84  9.64    0.129       0.129     0.129       0.129     0.129       0.129 
# 6     6  9.80  9.55    1.72        1.72      1.72        1.72      1.72        1.72  
# 7     7 10.8   9.45    0.461       0.461     0.461       0.461     0.461       0.461 
# 8     8 11.7   9.36   -1.27       -1.27     -1.27       -1.27     -1.27       -1.27  
# 9     9 12.7   9.27   -0.687      -0.687    -0.687      -0.687    -0.687      -0.687 
#10    10 13.6   9.18   -0.446      -0.446    -0.446      -0.446    -0.446      -0.446 
# … with 90 more rows
#一个tible:100 x 9
#g1 g2 g3 g1.x.平均值g1.x.中值g2.x.平均值g2.x.中值g3.x.平均值g3.x.中值
#                                         
# 1     1  5    10      -0.560      -0.560    -0.560      -0.560    -0.560      -0.560 
# 2     2  5.96  9.91   -0.230      -0.230    -0.230      -0.230    -0.230      -0.230 
# 3     3  6.92  9.82    1.56        1.56      1.56        1.56      1.56        1.56  
# 4     4  7.88  9.73    0.0705      0.0705    0.0705      0.0705    0.0705      0.0705
# 5     5  8.84  9.64    0.129       0.129     0.129       0.129     0.129       0.129 
# 6     6  9.80  9.55    1.72        1.72      1.72        1.72      1.72        1.72  
# 7     7 10.8   9.45    0.461       0.461     0.461       0.461     0.461       0.461 
# 8     8 11.7   9.36   -1.27       -1.27     -1.27       -1.27     -1.27       -1.27  
# 9     9 12.7   9.27   -0.687      -0.687    -0.687      -0.687    -0.687      -0.687 
#10    10 13.6   9.18   -0.446      -0.446    -0.446      -0.446    -0.446      -0.446 
#…还有90行

也可以使用
dplyr

library(dplyr)
#Code
new <- df %>% group_by(s) %>%
  summarise_all(.funs = list("x.mean"=mean,"x.median"=median))
库(dplyr)
#代码
新%group_由%>%
总结所有内容(.funs=列表(“x.mean”=平均值,“x.median”=中值))
输出:

# A tibble: 100 x 7
       s g1_x.mean g2_x.mean g3_x.mean g1_x.median g2_x.median g3_x.median
   <dbl>     <dbl>     <dbl>     <dbl>       <dbl>       <dbl>       <dbl>
 1 -2.31        72      73.1      3.55          72        73.1        3.55
 2 -1.97        18      21.3      8.45          18        21.3        8.45
 3 -1.69        26      29.0      7.73          26        29.0        7.73
 4 -1.55        57      58.7      4.91          57        58.7        4.91
 5 -1.27        43      45.3      6.18          43        45.3        6.18
 6 -1.27         8      11.7      9.36           8        11.7        9.36
 7 -1.22        78      78.9      3             78        78.9        3   
 8 -1.14        29      31.9      7.45          29        31.9        7.45
 9 -1.12        46      48.2      5.91          46        48.2        5.91
10 -1.07        65      66.4      4.18          65        66.4        4.18
# ... with 90 more rows
#一个tible:100x7
s g1_x.平均g2_x.平均g3_x.平均g1_x.中值g2_x.中值g3_x.中值
1 -2.31        72      73.1      3.55          72        73.1        3.55
2 -1.97        18      21.3      8.45          18        21.3        8.45
3 -1.69        26      29.0      7.73          26        29.0        7.73
4 -1.55        57      58.7      4.91          57        58.7        4.91
5 -1.27        43      45.3      6.18          43        45.3        6.18
6 -1.27         8      11.7      9.36           8        11.7        9.36
7 -1.22        78      78.9      3             78        78.9        3   
8 -1.14        29      31.9      7.45          29        31.9        7.45
9 -1.12        46      48.2      5.91          46        48.2        5.91
10 -1.07        65      66.4      4.18          65        66.4        4.18
# ... 还有90行

也可以使用
dplyr

library(dplyr)
#Code
new <- df %>% group_by(s) %>%
  summarise_all(.funs = list("x.mean"=mean,"x.median"=median))
库(dplyr)
#代码
新%group_由%>%
总结所有内容(.funs=列表(“x.mean”=平均值,“x.median”=中值))
输出:

# A tibble: 100 x 7
       s g1_x.mean g2_x.mean g3_x.mean g1_x.median g2_x.median g3_x.median
   <dbl>     <dbl>     <dbl>     <dbl>       <dbl>       <dbl>       <dbl>
 1 -2.31        72      73.1      3.55          72        73.1        3.55
 2 -1.97        18      21.3      8.45          18        21.3        8.45
 3 -1.69        26      29.0      7.73          26        29.0        7.73
 4 -1.55        57      58.7      4.91          57        58.7        4.91
 5 -1.27        43      45.3      6.18          43        45.3        6.18
 6 -1.27         8      11.7      9.36           8        11.7        9.36
 7 -1.22        78      78.9      3             78        78.9        3   
 8 -1.14        29      31.9      7.45          29        31.9        7.45
 9 -1.12        46      48.2      5.91          46        48.2        5.91
10 -1.07        65      66.4      4.18          65        66.4        4.18
# ... with 90 more rows
#一个tible:100x7
s g1_x.平均g2_x.平均g3_x.平均g1_x.中值g2_x.中值g3_x.中值
1 -2.31        72      73.1      3.55          72        73.1        3.55
2 -1.97        18      21.3      8.45          18        21.3        8.45
3 -1.69        26      29.0      7.73          26        29.0        7.73
4 -1.55        57      58.7      4.91          57        58.7        4.91
5 -1.27        43      45.3      6.18          43        45.3        6.18
6 -1.27         8      11.7      9.36           8        11.7        9.36
7 -1.22        78      78.9      3             78        78.9        3   
8 -1.14        29      31.9      7.45          29        31.9        7.45
9 -1.12        46      48.2      5.91          46        48.2        5.91
10 -1.07        65      66.4      4.18          65        66.4        4.18
# ... 还有90行

怪我吧,这太明显了,但我还是感觉到了。谢谢对不起,这是误解,我现在得到了变量的平均值,中位数,但我想要平均值,每组g1,g2,g3的“s”中位数!好吧,但这给出了我在我的例子中已经提供的结果…@Maximilian我想你可能需要以不同的方式构建逻辑,因为这永远不会奏效。再次感谢!责怪我,虽然如此明显,但我还是感觉到了。谢谢抱歉,这是误解,我现在得到了变量的平均值,中位数,但我想要平均值,每个gro的“s”中位数