使用dplyr对R中所有因变量进行分组汇总统计

使用dplyr对R中所有因变量进行分组汇总统计,r,R,我试图为10个因变量中的每一个生成groupwise(听力-我的自变量,因此HL和NH是两组)汇总统计数据(平均值、sd、最小值、最大值、标准误差等)。我能够使用以下两种代码对一个变量(R_PTA)执行此操作: 一, 我希望剩下的9个变量(L_PTA,B_PTA等)都是一样的,但如果可能的话,一次就可以了。没有办法做到这一点吗?我必须为每个因变量编码吗?我肯定它就在那里,但我找不到它!任何hep都将不胜感激 考虑一个基本的R解决方案,它具有by(面向对象的包装器,用于tapply将数据帧子集到因

我试图为10个因变量中的每一个生成groupwise(听力-我的自变量,因此HL和NH是两组)汇总统计数据(平均值、sd、最小值、最大值、标准误差等)。我能够使用以下两种代码对一个变量(R_PTA)执行此操作:

一,


我希望剩下的9个变量(L_PTA,B_PTA等)都是一样的,但如果可能的话,一次就可以了。没有办法做到这一点吗?我必须为每个因变量编码吗?我肯定它就在那里,但我找不到它!任何hep都将不胜感激

考虑一个基本的R解决方案,它具有
by
(面向对象的包装器,用于
tapply
将数据帧子集到因子组中)和嵌套的
sapply
(用于构建统计矩阵)。下面演示了10个统计列的随机种子数据:

set.seed(88)

df <- data.frame(
  GROUP = sapply(seq(50), function(i) sample(c("NH", "HL"), 1, replace=TRUE)),
  STAT1 = rnorm(50)*100,
  STAT2 = rnorm(50),
  STAT3 = runif(50)*100,
  STAT4 = runif(50),
  STAT5 = rgamma(50, shape = 2)*100,
  STAT6 = rgamma(50, shape = 2),
  STAT7 = rpois(50, lambda = 100)*100,
  STAT8 = rpois(50, lambda = 100),
  STAT9 = rexp(50, rate = 1)*100,
  STAT10 = rexp(50, rate = 1)
)

dfList <- by(df, df$GROUP, FUN = function(d)
                sapply(d[2:ncol(d)], function(i) 
                  c(mean = mean(i, na.rm=TRUE),
                    sd = sd(i, na.rm=TRUE),
                    median = median(i, na.rm=TRUE),
                    min = min(i, na.rm=TRUE),
                    max = max(i, na.rm=TRUE)
                  )
                )
            )

考虑使用
by
(用于
tapply
的面向对象包装器,用于将数据帧子集为因子组)和嵌套
sapply
(用于构建统计矩阵)的基本R解决方案。下面演示了10个统计列的随机种子数据:

set.seed(88)

df <- data.frame(
  GROUP = sapply(seq(50), function(i) sample(c("NH", "HL"), 1, replace=TRUE)),
  STAT1 = rnorm(50)*100,
  STAT2 = rnorm(50),
  STAT3 = runif(50)*100,
  STAT4 = runif(50),
  STAT5 = rgamma(50, shape = 2)*100,
  STAT6 = rgamma(50, shape = 2),
  STAT7 = rpois(50, lambda = 100)*100,
  STAT8 = rpois(50, lambda = 100),
  STAT9 = rexp(50, rate = 1)*100,
  STAT10 = rexp(50, rate = 1)
)

dfList <- by(df, df$GROUP, FUN = function(d)
                sapply(d[2:ncol(d)], function(i) 
                  c(mean = mean(i, na.rm=TRUE),
                    sd = sd(i, na.rm=TRUE),
                    median = median(i, na.rm=TRUE),
                    min = min(i, na.rm=TRUE),
                    max = max(i, na.rm=TRUE)
                  )
                )
            )

我建议制作一个可复制的示例,但总体思路是,我建议您使用
groupby_uu()
summary_u()
,这样您就可以灵活地使用变量名。也许其他人会有更好的方法。@Clarinetist,
动词形式正在被淘汰。同意可复制的例子,记住我们没有你的数据@阿克斯曼哇,这对我来说是个新闻!我得调查一下,谢谢@单簧管演奏者,我们可以用英语交谈。@单簧管演奏者-谢谢你的输入。如果原始数据有帮助的话:我建议制作一个可复制的示例,但总体思路是,我建议您使用
groupby_uu()
summary_u()
,这样您就可以灵活使用变量名。也许其他人会有更好的方法。@Clarinetist,
动词形式正在被淘汰。同意可复制的例子,记住我们没有你的数据@阿克斯曼哇,这对我来说是个新闻!我得调查一下,谢谢@单簧管演奏者,我们可以用英语交谈。@单簧管演奏者-谢谢你的输入。如果有帮助,这里是原始数据:
RightearPTA
   mean  sd median  max min
HL 26.9 7.3   27.5 37.5 8.8
NH 11.6 4.1   12.5 16.2 2.5
set.seed(88)

df <- data.frame(
  GROUP = sapply(seq(50), function(i) sample(c("NH", "HL"), 1, replace=TRUE)),
  STAT1 = rnorm(50)*100,
  STAT2 = rnorm(50),
  STAT3 = runif(50)*100,
  STAT4 = runif(50),
  STAT5 = rgamma(50, shape = 2)*100,
  STAT6 = rgamma(50, shape = 2),
  STAT7 = rpois(50, lambda = 100)*100,
  STAT8 = rpois(50, lambda = 100),
  STAT9 = rexp(50, rate = 1)*100,
  STAT10 = rexp(50, rate = 1)
)

dfList <- by(df, df$GROUP, FUN = function(d)
                sapply(d[2:ncol(d)], function(i) 
                  c(mean = mean(i, na.rm=TRUE),
                    sd = sd(i, na.rm=TRUE),
                    median = median(i, na.rm=TRUE),
                    min = min(i, na.rm=TRUE),
                    max = max(i, na.rm=TRUE)
                  )
                )
            )
dfList$HL

#              STAT1       STAT2     STAT3      STAT4     STAT5     STAT6      STAT7     STAT8      STAT9      STAT10
# mean     -6.594221 -0.04059519 52.990723 0.58753311 157.55220 1.9196911 10103.4483 101.17241 113.089148 0.771495372
# sd      102.512709  0.99159105 31.055376 0.27339871 152.37034 1.4880694   709.3673  10.02165 121.360898 0.720117072
# median    8.034055  0.01163562 56.416484 0.56894472 136.58274 1.5150241 10200.0000 103.00000  77.302150 0.599291434
# min    -199.786535 -1.84703449  1.345751 0.00207128  22.56936 0.1553518  8400.0000  82.00000   2.396641 0.006532798
# max     251.976970  2.55701655 98.612123 0.99413520 806.38484 7.1030277 11900.0000 120.00000 487.719745 3.133768953

dfList$NH

#             STAT1       STAT2      STAT3      STAT4    STAT5    STAT6      STAT7     STAT8      STAT9    STAT10
# mean     26.51853 -0.13748799 44.1973692 0.46621478 155.7555 1.880407  9961.9048 104.38095 150.596480 1.1243476
# sd       90.57645  0.77843518 29.9227560 0.30340507 121.5361 1.105004   868.6059   8.44083 131.123059 1.1627959
# median   24.52202 -0.02949522 46.1950960 0.33646282 114.7845 1.736198  9700.0000 105.00000 122.841835 0.7819896
# min    -105.54741 -1.58980314  0.2636007 0.02044767  17.3282 0.291350  8900.0000  89.00000   7.799051 0.1108107
# max     194.78958  1.35889041 96.0175463 0.99160167 434.5724 4.368176 12000.0000 120.00000 554.307036 5.1537741