Я новичок в R и испытываю проблему, правильно заполняющую столбец данных в кадре данных. Я заполняю два столбца (P_Score и P_Class) на основе другого столбца (P_Value), используя ряд операторов if/else if.Несколько действий из нескольких операторов if/else if - R
i<- 0
nr<- nrow(myData)
while(i<nr){
i<-1+i
if(toString(myData$P_Value[i])=="NA"){ myData$P_Score[i] <- myData$P_Value[i]
} else if (as.numeric(toString(myData$P_Value[i]))<5){
myData$P_Score[i] <- 1; myData$P_Class[i] <- "Minimal Depression";
} else if (as.numeric(toString(myData$P_Value[i]))<10){
myData$P_Score[i] <- 2; myData$P_Class[i] <- "Mild Depression";
} else if (as.numeric(toString(myData$P_Value[i]))<15){
myData$P_Score[i] <- 3; myData$P_Class[i] <- "Moderate Depression";
} else if (as.numeric(toString(myData$P_Value[i]))<20){
myData$P_Score[i] <- 4; myData$P_Class[i] <- "Moderate-Severe Depression";
} else
myData$P_Score[i] <- 5; myData$P_Class[i] <- "Severe Depression";
}
Однако это не дает мне мой желаемый результат, и вместо этого я заводиться с этим:
P_Value P_Score P_Class
4 1 Severe Depression
25 5 Severe Depression
8 2 Severe Depression
13 3 Severe Depression
17 4 Severe Depression
1 1 Severe Depression
12 3 Severe Depression
Так P_Score заполняемых просто отлично, но P_Class всегда недобросовестный «Тяжелое Депрессия». Должно быть, у меня проблема с несколькими операциями, основанными на условии 1 if, но я не могу понять, что я делаю неправильно. Я читал в другом месте, пока вы положили точки с запятой после того, как заявления должны работать, но это явно не работает.
Я также попытался интервал из команд, как это:
} else if (as.numeric(toString(myData$P_Value[i]))<5){
myData$P_Score[i] <- 1
myData$P_Class[i] <- "Minimal Depression"
Но это, кажется, не работает. Пожалуйста помоги!
Первый намек: использование 'для (я в 1: nr) {'более« естественный », чем' while (i
Qaswed
Или вместо цикла используйте что-то вроде 'grps <- cut (myData $ P_Value, breaks = c (-Inf, 5, 10, 15, 20, Inf), labels = c (" Min Dep "," Mild Dep " , «Mod Dep», «Mod-Sev Dep», «Sev Dep»)) ' –
Ответ @J_F получает смысл, поскольку у вас есть два утверждения после else, вам нужно поместить их в блок. – Psidom