我有一个带有分类变量hospital_code
的数据集,它有10个级别。
我正在运行的程序循环并获取数据的子集,使得变量compLbl
恰好包含10个hospital_codes中的2个,以便它们可以相互比较。我现在有一种情况,在每个循环中,我需要compLbl进行二进制编码(1s和0s)。
如果我只是从第一个循环获取compLbl的可能值为AMH
和BJH
的子集数据,我可以轻松地执行以下操作:
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
中的两个值是什么,它都会对它们进行二进制编码?我的想法是通过引用因子级别1来实现这一点,因为因子变量compLbl中存在两个值。像这样:
nData$compLbl2 = with(nData,(ifelse(FACTORLEVEL(compLbl) == 1, 1,0)))
在上面的示例中,FACTORLEVEL(compLbl)
会为AMH
返回1,为BHC
返回2,因为这些是R会自动分配的因子级别。但是,我不确定如何做到这一点,或者是否有可能。
答案 0 :(得分:0)
我会使用这个命令:
nData <- within(nData, compLbl2 = rev(as.numeric(compLbl[drop = TRUE]) -1))