如何在更大的数据集中为子组的子组生成汇总统计信息(类似于 psych::describeBy)?

How to generate summary statistics (similar to psych::describeBy) for subgroups of subgroups, within a larger dataset?

这里是 R(用于生物统计)的新手!我有一个巨大的数据集,并且正在使用 psych 包中的 describe()describeBy()。但我也在尝试找到一种方法来对子组中的子组进行基本统计。

例如,我的数据集是关于一个俱乐部的会员资格,该俱乐部有中国和印度会员。其他变量包括性别、年龄、身高、体重、BMI 等。

我想出了 psych::describeBy 来查看由一个变量定义的子组的均值和标准差,例如种族,但我不知道如何进一步缩小范围,以便为中国 男性 成员生成摘要

我尝试使用 subset() 函数重新定义,然后再次 运行 describeBy,例如

chinese <- subset(maindata, chinese=1)
describeBy(chinese, male=1)

但这并没有奏效,结果与describeBy(maindata,chinese=1)相同,而不是中国男性子集。

我希望这是有道理的。

我能想到的唯一其他解决方案是在 MS Excel 中将我的主要数据集分解为较小的数据集,然后分别重新上传(例如 Chinese.xls、Indian.xls),或者创建一个由种族性别组合定义的新变量,例如Chinesemale=1, Chinesefemale=2, Indianmale=3, Indianfemale=4.

我或多或少需要通过这些子组的子组进行 t 检验和 Fisher 精确分析,所以任何有助于解决这些问题的好的包装建议都将不胜感激!

提前致谢!!

示例数据

df1 <- data.frame(subject = c(1, 2, 3, 4, 5),
                  chinese = c(1, 1, 1, 0, 0),
                  male = c(1, 0, 1, 0, 1),
                  value = c(45, 23, 84, 11, 12))

代码中的两处语法更改:

  • 双等号subset()。您希望保留 chinese 等于 1 的行。如果您将值 1 分配给名为 chinese.
  • 的参数,则可以使用单个等号
  • describeBy() 中,group 参数为您提供该列中每个类别的不同摘要统计信息(如下所示)。您不能将它用于 male=1 的子集。
chinese <- subset(df1, chinese == 1)

describeBy(chinese, group = "male")

 Descriptive statistics by group 
group: 0
        vars n mean sd median trimmed mad min max range skew kurtosis se
subject    1 1    2 NA      2       2   0   2   2     0   NA       NA NA
chinese    2 1    1 NA      1       1   0   1   1     0   NA       NA NA
male       3 1    0 NA      0       0   0   0   0     0   NA       NA NA
value      4 1   23 NA     23      23   0  23  23     0   NA       NA NA
------------------------------------------------------------------------------------------------------------------------------------- 
group: 1
        vars n mean    sd median trimmed   mad min max range skew kurtosis   se
subject    1 2  2.0  1.41    2.0     2.0  1.48   1   3     2    0    -2.75  1.0
chinese    2 2  1.0  0.00    1.0     1.0  0.00   1   1     0  NaN      NaN  0.0
male       3 2  1.0  0.00    1.0     1.0  0.00   1   1     0  NaN      NaN  0.0
value      4 2 64.5 27.58   64.5    64.5 28.91  45  84    39    0    -2.75 19.5

如果您只想查看样本中男性的汇总统计数据,可以将 & male == 1 添加到 subset():

chinese <- subset(df1, chinese == 1 & male == 1)

describeBy(chinese)

        vars n mean    sd median trimmed   mad min max range skew kurtosis   se
subject    1 2  2.0  1.41    2.0     2.0  1.48   1   3     2    0    -2.75  1.0
chinese    2 2  1.0  0.00    1.0     1.0  0.00   1   1     0  NaN      NaN  0.0
male       3 2  1.0  0.00    1.0     1.0  0.00   1   1     0  NaN      NaN  0.0
value      4 2 64.5 27.58   64.5    64.5 28.91  45  84    39    0    -2.75 19.5