【问题标题】:How to return a vector of codes for each level of a variable in R?如何为R中变量的每个级别返回代码向量?
【发布时间】:2021-09-23 09:25:48
【问题描述】:

我有一个data frame,每个健康状况都有几个诊断代码(每行一个代码)。我需要为每个条件获取一个vector 的代码,并且向量需要以每个条件命名。

Condition <- as.character(c("COPD", "COPD", "COPD", "COPD", "HIV", "HIV", "HIV", "Sepsis", "Sepsis", "Sepsis", "Sepsis", "Sepsis"))
Code <- as.character(c("6A61.00", "8BPT.00", "8BPT000", "8BPT100", "E2E0.00", "E2E0100", "E2E0z00", "E2E1.00", "E2E2.00", "E2Ey.00", "E2Ez.00", "Eu84400"))
df <- data.frame(Condition, Code)

df
   Condition    Code
1       COPD 6A61.00
2       COPD 8BPT.00
3       COPD 8BPT000
4       COPD 8BPT100
5        HIV E2E0.00
6        HIV E2E0100
7        HIV E2E0z00
8     Sepsis E2E1.00
9     Sepsis E2E2.00
10    Sepsis E2Ey.00
11    Sepsis E2Ez.00
12    Sepsis Eu84400

我期望得到什么:

> COPD
[1] "6A61.00" "8BPT.00" "8BPT000" "8BPT100"
> HIV
[1] "E2E0.00" "E2E0100" "E2E0z00"
> Sepsis
[1] "E2E1.00" "E2E2.00" "E2Ey.00" "E2Ez.00" "Eu84400"

但是,我不想为单个代码中的每个条件创建一个vector,如下所示:

COPD <- df$Code[which(df$Condition=="COPD")]
HIV <- df$Code[which(df$Condition=="HIV")]
Sepsis <- df$Code[which(df$Condition=="Sepsis")] 

有没有更好的方法来优化一段代码以同时为每个条件获取一个代码向量? (我有大约 300 个条件)。

此外,我不希望向量以 factor 的形式返回,就像它正在发生的那样:

> COPD
[1] 6A61.00 8BPT.00 8BPT000 8BPT100
12 Levels: 6A61.00 8BPT.00 8BPT000 8BPT100 E2E0.00 E2E0100 E2E0z00 E2E1.00 ... Eu84400
> HIV
[1] E2E0.00 E2E0100 E2E0z00
12 Levels: 6A61.00 8BPT.00 8BPT000 8BPT100 E2E0.00 E2E0100 E2E0z00 E2E1.00 ... Eu84400
> Sepsis
[1] E2E1.00 E2E2.00 E2Ey.00 E2Ez.00 Eu84400
12 Levels: 6A61.00 8BPT.00 8BPT000 8BPT100 E2E0.00 E2E0100 E2E0z00 E2E1.00 ... Eu84400

感谢您的帮助。

【问题讨论】:

    标签: r vector dplyr subset


    【解决方案1】:

    我们可以在base Runstack 中执行此操作

    list2env(unstack(df, Code ~ Condition), .GlobalEnv)
    

    -检查对象

    > COPD
    [1] "6A61.00" "8BPT.00" "8BPT000" "8BPT100"
    > HIV
    [1] "E2E0.00" "E2E0100" "E2E0z00"
    > Sepsis
    [1] "E2E1.00" "E2E2.00" "E2Ey.00" "E2Ez.00" "Eu84400"
    

    【讨论】:

      【解决方案2】:

      你可以使用 -

      list2env(split(as.character(df$Code), df$Condition), .GlobalEnv)
      
      COPD
      #[1] "6A61.00" "8BPT.00" "8BPT000" "8BPT100"
      
      HIV
      #[1] "E2E0.00" "E2E0100" "E2E0z00"
      
      Sepsis
      #[1] "E2E1.00" "E2E2.00" "E2Ey.00" "E2Ez.00" "Eu84400"
      

      但是,在全局环境中创建如此多的独立向量并不是一个好的做法。他们很难管理。最好将它们保留在列表中。

      【讨论】:

      • 谢谢@Ronak。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-29
      • 2022-01-06
      • 2014-03-28
      • 1970-01-01
      • 2015-11-26
      • 2012-10-08
      • 2023-03-14
      相关资源
      最近更新 更多