在R中创建分类变量

时间:2018-12-28 06:28:44

标签: r reshape

我正在尝试创建一个基于ICD代码的分类变量。

head(obesity)
ICD.9.Code  Encounter.ID
E66.01    408773
E66.3     542207
E66.3     358741
E66.09    342534

obesity$obesity<- ifelse(obesity$ICD.9.Code =="E66.3", 1,      
             ifelse(obesity$ICD.9.Code=="E66.9"|obesity$ICD.9.Code=="E66.8"|obesity$ICD.9.Code=="E66.09",2,      
              ifelse(obesity$ICD.9.Code=="E66.1"|obesity$ICD.9.Code=="E66.2",3,4)))

但我一直收到此错误

我希望数据如下所示,请帮助

ICD.9.Code  Encounter.ID  Obesity
E66.01    408773     4
E66.3     542207     1
E66.3     358741     1
E66.09    342534     2

2 个答案:

答案 0 :(得分:0)

这是使用data.table

的解决方案
obesity<-as.data.table(obesity)
obesity[ICD.9.Code == "E66.3",Obesity := 1]
obesity[ICD.9.Code == "E66.9" | ICD.9.Code == "E66.8" | ICD.9.Code == "E66.09",Obesity := 2]
obesity[ICD.9.Code == "E66.1" | ICD.9.Code == "E66.2",Obesity := 3]
obesity[is.na(Obesity),Obesity := 4]

希望有帮助。

答案 1 :(得分:0)

这可能对您当前的数据有所帮助。无法保证,因为我还没有对其他数据进行测试。

library(tidyverse)
    mydf %>% 
      mutate(Obesity=ifelse(ICD.9.Code=="E66.3",1,c(4,2)))

编辑:除非ID遵循头部中的确切模式,否则这将是不可能的。您可能考虑制作多个ifels,但这会破坏整个目的。 一种更简单的方法是对编码使用不同的数据帧,并按照注释中的建议绑定它们。想想mergecbind。 干杯!