0

我有一个hospital_code包含 10 个级别的分类变量的数据集。

我正在运行的程序循环并获取数据的一个子集,以便该变量compLbl恰好包含 10 个医院代码中的 2 个,以便可以将它们相互比较。我现在有一种情况,在每个循环中,我需要对 compLbl 进行二进制编码(1s 和 0s)。

如果我只是从第一个循环中获取子集数据,其中 compLbl 的可能值为AMHBJH,我可以轻松地执行以下操作:

nData$compLbl2 = with(nData,(ifelse(compLbl == "AMH", 1,0)))

并获取如下所示的数据:

head(nData)
compLbl outLbl Race_Code Age Complexity_Subclass_Code compLbl2
1     AMH      0         W  63                        1        1
2     AMH      0         W  44                        2        1
3     AMH      0         W  88                        3        1
4     BHC      0         W  64                        1        0
5     BHC      0         W  61                        2        0
6     BHC      0         W  61                        1        0

我如何概括这一点,以便无论其中有什么两个值都会对compLbl它们进行二进制编码?我的想法是可能通过为因子变量 compLbl 中存在的任何两个值引用因子级别 1 来做到这一点。像这样:

nData$compLbl2 = with(nData,(ifelse(FACTORLEVEL(compLbl) == 1, 1,0)))

在我上面的示例中,FACTORLEVEL(compLbl)将返回 1AMH和 2,BHC因为这些是 R 将自动分配的因子水平。但是,我不确定如何执行此操作,或者是否可能。

4

1 回答 1

0

我会使用这个命令:

nData <- within(nData, compLbl2 = rev(as.numeric(compLbl[drop = TRUE]) -1))
于 2012-11-08T20:42:36.313 回答