【问题标题】:Trying to assign groups in R, but it is filling in NA values and missing others that belong in the group试图在 R 中分配组,但它正在填写 NA 值并缺少属于该组的其他值
【发布时间】:2017-12-07 21:21:11
【问题描述】:

所以我在 R(弗雷明汉心脏研究数据)中有一个数据集,我正在尝试将 BMI 组分配为“体重过轻”、“正常”、“超重”和“肥胖”。

它有超过 11,000 个观察值和 38 个变量/列,所以在这里发布一些数据会有点困难(我希望没有它回答起来不会太麻烦)。

数据集被称为 frm,我试图通过以下方式进行子集化:

frm$BMIGRP <- NA  #Creating new variable (this part works and creates a BMIGRP column with all NA values)
frm$BMIGRP[which(as.numeric(frm$BMI) < 18.5)] <- "underweight"

但是,数据集 BMI 变量中有 NA 值(用“.”表示,我也尝试将其更改为 NA)。

当我尝试以这种方式为每个组进行子集化时,它仅将一些体重不足的值分配给“体重不足”,并分配了很多 NA /“。”价值减持为好。然后它告诉我只有 10 个“正常”体重受试者,大约 11000 个属于肥胖类别,这不是真的,因为我可以查看数据集。

如果操作正确,这应该会创建四个组,每个类别都有数百到数千个观察值。但我只有 10 人正常,71 人体重不足,约 11,000 人肥胖。

我只是不确定我哪里出了问题,或者是否有不同的方式我可以创建一个新变量并以相同的方式分配它。非常感谢任何帮助。

我还应该提到,这是我的教授在我们的实验课程中作为示例提供给我们的代码,我基本上是在复制和粘贴它并为我的数据集进行适当的替换。

这是我在本网站上的第一个问题,如果问题不完整或需要提供更多信息,我深表歉意。谢谢!

【问题讨论】:

  • 检查 BMI 列的类,class(frm$BMI)。它应该是数字。
  • 是的,它不是数字,出于某种原因它是字符。谢谢!

标签: r variables missing-data


【解决方案1】:

阅读您的代码,该列似乎不是数字。

这应该可行:

frm$BMI <- as.numeric(frm$BMI)
frm$BMIGRP[frm$BMI < 18.5] <- "underweight"

【讨论】:

  • 我尝试使用导入数据集按钮重新导入数据集,但我确实看到该列不是数字(它是某种字符?),我将其更改为数字。在那之后,我使用了你的代码,它工作了!我认为您的意思是说 frm$BMIGRP[frm$BMI
  • 正确,这就是我的意思。很高兴它为你修好了。更新了我的代码
【解决方案2】:

就像@leeum 说的那样。检查BMI 是否为数字。如果要基于BMI 新建一个类别列,请查看case_when from dplyr。所以也许这就是你想要的:

library(dplyr)

frm <- frm %>% 
  mutate(BMI = as.numeric(BMI)) %>%
  mutate(BMIGRP = case_when(
    BMI < 18.5 ~ 'underweight',
    between(BMI, 18.5, 24.9)  ~ 'healthy weight',
    between(BMI, 25, 29.9) ~ 'overweight',
    BMI > 30 ~ 'obese')
  )

mutate(BMIGRP = as.numeric(BMIGRP))BMIGRP 列转换为数字。然后mutate(BMIGRP = case_when(...) 将创建一个名为BMIGRP 的新列,并根据BMI 分配“体重不足”、“健康体重”、“超重”或“肥胖”。如果参数不适用,将分配NA

【讨论】:

    猜你喜欢
    • 2018-06-04
    • 2015-11-09
    • 2017-03-31
    • 1970-01-01
    • 1970-01-01
    • 2018-07-31
    • 1970-01-01
    • 2022-11-30
    • 1970-01-01
    相关资源
    最近更新 更多