【发布时间】:2019-08-20 10:59:59
【问题描述】:
我正在尝试用 5 个标准为代谢综合征编码一个变量肥胖(3 个可能的二元结果)胰岛素抵抗(3 个可能的二元结果)血脂异常 TGC(3 个可能的二元结果)血脂异常 HDL(2 个可能的二元结果)和高血压(4 种可能的二元结果)。如果受试者对这 5 条标准中的任何 3 条为阳性,则他将被视为代谢综合征阳性。
考虑到任何对 4 或 5 条标准呈阳性的受试者都将被代理覆盖,我尝试将这些结合到 C5,3 中。但是当我试图涵盖任何可能的组合时,我的代码变得太大了。是否可以使用运算符优先级使我的代码更小以使其更紧凑?
METSYN <- array (NA,dim = dim(BancoTOTAL)[1] )
for (i in 1:791){
METSYN[i] <- ifelse ( #OID1 OID2
BancoTOTAL$sexo.x[i] == 0 && BancoTOTAL$cintura.x[i] > 90
&& BancoTOTAL$Glic[i] >= 100
&& BancoTOTAL$TRIG[i] > 150
|BancoTOTAL$sexo.x[i] == 1 && BancoTOTAL$cintura.x[i] > 80
&& BancoTOTAL$Glic[i] >= 100
&& BancoTOTAL$TRIG[i] > 150
|BancoTOTAL$IMC[i] > 30
&& BancoTOTAL$Glic[i] >= 100
&& BancoTOTAL$TRIG[i] > 150
and soon
, 1, 0)
}
这是我使用中间分类变量重新编写的代码
METSYN <- array(NA, dim = dim(BancoTOTAL)[1])
for (i in 1:(dim(BancoTOTAL)[1])){
METSYN[i] <- ifelse(
#OID1
BancoTOTAL$obesity[i] == 1
&& BancoTOTAL$insulinR[i] == 1
&& BancoTOTAL$dyslipidemiaTGC[i] == 1
#OID2
|BancoTOTAL$obesity[i] == 1
&& BancoTOTAL$insulinR[i] == 1
&& BancoTOTAL$dyslipidemiaHDL[i] == 1
#OIH
|BancoTOTAL$obesity[i] == 1
&& BancoTOTAL$insulinR[i] == 1
&& BancoTOTAL$HBP[i] == 1
#OD1D2
|BancoTOTAL$obesity[i] == 1
&& BancoTOTAL$dyslipidemiaTGC[i] == 1
&& BancoTOTAL$dyslipidemiaHDL[i] == 1
#OD1H
|BancoTOTAL$obesity[i] == 1
&& BancoTOTAL$dyslipidemiaTGC[i] == 1
&& BancoTOTAL$HBP[i] == 1
#OD2H
|BancoTOTAL$obesity[i] == 1
&& BancoTOTAL$dyslipidemiaHDL[i] == 1
&& BancoTOTAL$HBP[i] == 1
#ID1D2
|BancoTOTAL$obesity[i] == 1
&& BancoTOTAL$dyslipidemiaTGC[i] == 1
&& BancoTOTAL$dyslipidemiaHDL[i] == 1
#ID1H
|BancoTOTAL$insulinR[i] == 1
&& BancoTOTAL$dyslipidemiaTGC[i] == 1
&& BancoTOTAL$HBP[i] == 1
#ID2H
|BancoTOTAL$insulinR[i] == 1
&& BancoTOTAL$dyslipidemiaHDL[i] == 1
&& BancoTOTAL$HBP[i] == 1
#D1D2H
|BancoTOTAL$dyslipidemiaTGC[i] == 1
&& BancoTOTAL$dyslipidemiaHDL[i] == 1
&& BancoTOTAL$HBP[i] == 1
, 1, 0 )
}
【问题讨论】:
-
我只检查所有条件一次,然后检查这个向量的长度是否大于 3。
-
使用中间向量?我该如何编写代码(我是 R 中的菜鸟)?
-
我尝试使用中间变量来解决它,它使代码更加紧凑,但仍然不是很优雅。
-
您能否提供一个带有
dput的示例数据集。我会调查一下并尽力帮助你。 -
这是我修改后的代码
标签: r logical-operators operator-precedence