来自多个 if / else if 语句的多个动作 - R

Tim*_*Tim 2 if-statement r

我是 R 的新手,遇到了在数据框中正确填充一列数据的问题。我正在使用一系列 if / else if 语句基于另一列 (P_Value) 填充两列 (P_Score 和 P_Class)。

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";
}
Run Code Online (Sandbox Code Playgroud)

然而,这并没有给我想要的结果,相反,我得到了这个:

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
Run Code Online (Sandbox Code Playgroud)

所以 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"
Run Code Online (Sandbox Code Playgroud)

但这似乎也不起作用。请帮忙!

Pie*_*une 5

R 有一个函数,不需要任何循环。请阅读?cut

设置示例

myData
#   P_Value
# 1       4
# 2      25
# 3       8
# 4      13
# 5      17
# 6       1
# 7      12
# 8      NA

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"))
Run Code Online (Sandbox Code Playgroud)

创建组后,我们可以从中创建一个 Score 和 Class 列

myData$P_Score <- as.numeric(grps)
myData$P_Class <- grps
myData
#   P_Value P_Score     P_Class
# 1       4       1     Min Dep
# 2      25       5     Sev Dep
# 3       8       2    Mild Dep
# 4      13       3     Mod Dep
# 5      17       4 Mod-Sev Dep
# 6       1       1     Min Dep
# 7      12       3     Mod Dep
# 8      NA      NA        <NA>
Run Code Online (Sandbox Code Playgroud)