【问题标题】:R: Recode 2 continuous variables into 1 categorical variableR:将 2 个连续变量重新编码为 1 个分类变量
【发布时间】:2018-07-14 11:12:17
【问题描述】:

我有一个数据集,其中包含 1 个收缩压变量和 1 个变量舒张压。我想制作一个血压水平的分类变量。这需要使用每个变量的值范围,这被证明是困难的。

       ID   Systolic Diastolic
       1      130     80
       2      118     76
       3      120     80
       4      115     74
       5      184     107
       6      114     69
       7       95     72

这是我得到的最接近的,但我不相信我在这方面走在正确的道路上。有人可以指出我正确的方向吗?

  df$BPLevel[Systolic < 120 | Diastolic < 80] <- "Normal"
  df$BPLevel[120 < Systolic < 139 | 80 < Diastolic < 89] <- "Prehypertension"
  df$BPLevel[Systolic >= 140 | Diastolic >= 90] <- "Hypertension"
  df$BPLevel[Systolic == "." | Diastolic == "."] <- "Missing"

【问题讨论】:

  • 如果这不起作用并且您想知道为什么需要df$Systolicdf$Diastolic。否则,如果您已经知道这一点并且可行,那么您是在询问一种潜在的更好的逻辑编程方法吗?

标签: r


【解决方案1】:

遇到这种情况,我最初的尝试是尝试使用dplyrcase_when()函数。

library(dplyr)

df <- data.frame(ID = c(1:7),
                 Systolic = c(130,118,120,115,184,114,95),
                 Diastolic = c(80,76,80,74,107,69,72))

df <- df %>%
      mutate(BPLevel = case_when(Systolic < 120 | Diastolic < 80 ~ "Normal",
                                 between(Systolic, 120, 139) | between(Diastolic, 80, 89)~ "Prehypertension",
                                 Systolic>=140 | Diastolic >= 90 ~ "Hypertension",
                                 TRUE ~ "Missing"
                                 ))

唯一的另一件事是,在上面的示例中,如果 Systolic = 120 或 Diastolic = 80 会发生什么?我使用的dplyr::between函数包括120和80。查看?dplyr::between了解更多详情。

这是否有助于解决您的问题?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-28
    • 2021-01-18
    • 1970-01-01
    • 2013-04-08
    相关资源
    最近更新 更多