【问题标题】:How to get the mean of a variable by group, and produce a new variable in the data_table taking that value如何按组获取变量的平均值,并在 data_table 中生成一个采用该值的新变量
【发布时间】:2021-09-27 13:26:44
【问题描述】:

我找到了很多关于 R 中 dplyr group_by() 函数的其他问题的解决方案,比如下面的一个,它建议 summarize_each() 函数简单地打印每个有条件定义的所有变量观察的 mean数据集中的一组行。

不幸的是,我需要能够创建一个新变量来附加到每一行,它是测量的平均值(在这个例子中是女性的身高),以便我以后可以将它用作回归中的预测变量.

对于此示例,是否有任何不同的解决方案允许某人根据组的平均值(在此示例中为身高)运行回归/分类过程?

DF <- data.frame(Height = rnorm(100, 170, 5),
                 Weight = rnorm(100, 55, 5),
                 Gender = c(rep("male", 50), rep("female", 50)))


BMI <-  function(height,weight){(weight/(height)^2*10000)}

library(dplyr)
DF %>% 
  group_by(Gender) %>% 
  mutate(bmi = BMI(Height, Weight)) %>% 
  summarise(mean_bmi = mean(bmi))

【问题讨论】:

  • 您能否详细说明为什么同时使用group_by 和mutate 然后运行回归不是您想要的?
  • 这可能是解决方案 - 我不能说我知道如何去尝试它。在此解决方案中, group_by() 和 mutate() 似乎在运行此代码后生成的 summarise() 表中产生了所需的结果。但是,我不知道如何在回归中引用这些信息——这些代码所做的只是生成一个汇总表,其中包含每个组所需的平均值——它不会将这些值添加到 data_table 中,因此我可以稍后调用它在回归 model_form 中,就像我对任何其他变量一样。

标签: r dplyr grouping average


【解决方案1】:

您不需要summarise 代码行。您可以将mean 直接添加到您的mutate。

DF <- DF %>% 
  group_by(Gender) %>% 
  mutate(bmi = mean(BMI(Height, Weight))) %>% 
  ungroup()

然后您可以使用此数据集运行您的回归模型。

【讨论】:

  • 感谢您的回复 - 我现在尝试实现它并且它运行时没有任何错误,所以我相信该函数确实产生了我需要的值。唯一的问题是,我使用的是一个大型数据集(100 万+行),所以我试图避免任何手动输入。即使这段代码确实让我得到了我需要的值。但是,当我像您在此处建议的那样排除 summarise() 行时,运行 view() 函数时仍然看不到任何 bmi 变量。我需要将 bmi 变量作为一个新变量,其中所有“女性”组行的值将是相同的值(组平均值)。
  • 到目前为止,对于您提出的这个解决方案,我仍然需要添加 summarise() 行并手动创建一个新变量,其中对于“女性”组中的每一行,分配的值是平均值/mean bmi value for all women, etc...我要做的是自动设置新变量的这个步骤,该变量的值等于我在原始解决方案中产生的平均值/平均值问题。所以不幸的是,这不是我最初问题的解决方案,因为我仍然无法将 bmi 包含在回归 y ~ x1 (bmi), x2, x3... 设置中
  • 我一直在尝试做的是将管道的第一行调整为:DF$bmi %... 但是当我这样做时,我得到以下错误:错误在 set(x, j = name, value = value) 中:提供了 48 个项目以分配给“bmi”列的 1003681 个项目。如果您希望“回收”RHS,请使用 rep() 向您的代码读者明确这一意图。
  • 我会尝试解决每条评论。 1.我原来提供的代码没有保存回数据框DF。我现在已经更新了代码,所以在使用View() 2 时应该会看到它。现在#1 正在保存回数据框DF,您将拥有一个名为bmi 的新变量,您可以运行你的回归。 3.DF$bmi &lt;- DF %&gt;% 很接近。但你需要的是DF &lt;- DF %&gt;% ,就像我为 #1 所做的更改一样。
  • 是的!这似乎工作得很好,谢谢。这回答了我原来的问题。我在这里问我的问题之前已经尝试过这个,但我相信因为其中一个变量 - 身高或体重 - 有一些缺失 (NA) 值,所以结果是 bmi 列中的一列 NA 值。我想我认为这行代码存在问题,尽管我现在看到导致这些 NA 缺失值的问题是由于粒度变量中的缺失值造成的。非常感谢,这很有帮助!
猜你喜欢
  • 2017-10-13
  • 1970-01-01
  • 1970-01-01
  • 2021-06-14
  • 2020-05-03
  • 2021-02-14
  • 1970-01-01
  • 2022-11-10
  • 2023-02-25
相关资源
最近更新 更多