【问题标题】:function for both mean and Sd based on categorical variable in the data frame基于数据框中的分类变量的均值和 Sd 函数
【发布时间】:2023-03-11 13:32:01
【问题描述】:

我有 30 位患者,他们有 100 项临床数据,例如体重、BMI、腰围等,我想根据他们的疾病状态为所有患者取平均值和 SD 例如我的数据集看起来像

Patient_id   DateOfBirth       Sex     Weight1   Bmi1   Wasit1  Disease
204065       25-06-1995       Female    113.8    41.3   105.8   0
200214       09-12-1990       Female      90     35.6   108     1
191633       14-09-1971         Male    128.4    47     150     1
186156       22-09-1967         Male    157.3    51.4   145.6   0

我想根据他们的疾病状态输出,比如

Disease weight1Mean  Weight1SD      BMI1Mean    BMI1SD     Waist1Mean  WaistSD  
  0        135           30.7         46.3       7.14       125.7       28.1
  1        109           27.1         41.3       8.06       129         29.7

【问题讨论】:

标签: r dplyr aggregate


【解决方案1】:
your_df %>%
groupy_by(Disease) %>%
summarize(Weight1Mean = mean(Weight1),
Weight1SD = sd(Weight1
#Repeat for the rest of variables to sumamrize
)

您也可以使用summarize_at 代替summarize

#... %>%
summarize_at(vars(Weight1, BMI1, Waist1), list(Mean = mean, SD = sd))

summarize_if:

#... %>%
summarize_if(is.numeric, list(Mean = mean, SD = sd))

如果您想从汇总中排除数值变量,可以将它们重新编码为因子或使用select 删除它们。

【讨论】:

  • 感谢代码,但我需要所有变量 Mean 和 SD,由于数据集中有 1000 列,我无法为每个变量指定任何建议以在单个函数输出中获取所有均值和 SD
  • @Matrix_32 抱歉,我没有注意到 100 个变量部分:在这种情况下使用 summarize_if(is.numeric, list(Mean = mean, SD = sd))。如果你有一些数值,你想从summarize 中排除,例如将它们重新编码为因子。
【解决方案2】:

我们可以使用data.table

 library(data.table)
 setDT(df1)[, .(Weight1Mean = mean(Weight1), Weight1SD = sd(Weight1)), Disease]

【讨论】:

    猜你喜欢
    • 2014-01-14
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    • 2019-10-14
    • 2022-11-04
    • 1970-01-01
    • 2019-11-27
    相关资源
    最近更新 更多