基于R语言psych包的多变量分组描述统计实现及问题排查
R psych包:分组描述统计的两个问题解答
问题1:为什么输出的item编号是11和12?
这个item列的编号对应的是变量在原始数据框data_excel中的列索引位置。你使用了attach(data_excel)后单独指定StockPrice作为分析变量,但describeBy()仍然会参考该变量在原始数据框里的位置。
举个例子,如果data_excel里的第11列正好是StockPrice,那么当你按ggroup分组统计时,每个组的结果行都会显示这个列索引(11),所以你看到的是11和12(两个分组分别对应一行)。
你可以通过运行以下代码验证这一点:
# 查看data_excel的变量顺序和索引 colnames(data_excel) # 或者直接找StockPrice的位置 which(colnames(data_excel) == "StockPrice")
如果不想看到这个item列,其实可以在describeBy()的参数里加上item=FALSE,就会隐藏这一列啦。
问题2:如何实现多变量的分组描述统计?
你当前的代码报错是因为describeBy()的参数格式不对:
- 第一个参数
x需要是一个单一的对象(比如数据框、向量矩阵),不能直接罗列多个变量名; - 你在
ESGscore和group之间漏掉了逗号,导致语法错误。
正确的做法是把需要分析的多个变量组合成一个数据框传入,同时建议避免使用attach()(容易引发环境变量冲突),直接通过数据框索引来指定变量。修改后的代码如下:
# 加载包(如果已经加载可以跳过) install.packages("psych") library(psych) # 直接指定数据框中的目标变量,按ggroup分组统计 describeBy( x = data_excel[, c("StockPrice", "BookValuePS", "EPS", "ESGscore")], group = data_excel$ggroup, # 明确指定分组变量来自数据框 mat = TRUE, skew = FALSE, quant = c(0.25, 0.75) )
这样运行后,就会输出所有目标变量按ggroup分组后的完整描述统计结果,每个变量的每个分组都会对应一行结果,包含你需要的均值、标准差、分位数等指标。
内容的提问来源于stack exchange,提问作者wrangjangler
相关产品推荐
相关产品推荐

