我正在尝试从数据集sn_r
中的va
中选择列va$VACHART==
。如果满足此条件,那么我想在使用公式5+50*log10(va$sn_r)
计算该值时将其存储在新列中,如果不满足该条件,请在sn_r
的其他范围值中搜索并存储它。
在R中,我尝试使用if,else if语句,但是在“}”中出现意外的'}'错误
if(va$VACHART=="1" & va$sn_r>"0.025"){
va$ETDRS_R = 85+50*log10(va$sn_r)
}else if(va$VACHART=="1" & "0.020"< vd$sn_r <="0.025"){
va$ETDRS_R = 5
}else if(va$VACHART=="1" & "0.015"< vd$sn_r <="0.020"){
va$ETDRS_R = 3
}else if(va$VACHART=="1" & "0.005"< vd$sn_r <="0.015"){
va$ETDRS_R = 1
}else {#if(va$VACHART=="1" & "0"< vd$sn_r <="0.005"){
va$ETDRS_R = 0
}
答案 0 :(得分:0)
if
中的多个条件不是有效的语法,例如
"0.020" < vd$sn_r <= "0.025"
这必须表示为:
vd$sn_r > "0.020" & vd$sn_r <= "0.025"
话虽这么说,但我什至不清楚这些列实际上不是数字。无论如何,我们可以尝试更正您的代码,但更好的方法是使用case_when
包中的dplyr
:
va$ETDRS_R <- case_when(
va$VACHART == 1 & va$sn_r > 0.025 ~ 85+50*log10(va$sn_r),
va$VACHART == 1 & va$sn_r > 0.020 ~ 5,
va$VACHART == 1 & va$sn_r > 0.015 ~ 3,
va$VACHART == 1 & va$sn_r > 0.005 ~ 1,
TRUE ~ 0
)