在R中,如何解释大于/小于的switch语句

Ye *_* Xu 1 r switch-statement

在R语言中,我想使用switch语句来替换nest if else语句.我想为新列分配值,我的想法是:

## Create a function to seperate the case

Range <- function(x)
    if (CityData_Group_Copy$BadDebtNum[x] < 26)  
              { CityData_Group_Copy$BadDebtRange[x] <- "1~25"}

    else if(CityData_Group_Copy$BadDebtNum[x] > 25 && CityData_Group_Copy$BadDebtNum[x] < 51)  
              {CityData_Group_Copy$BadDebtRange[x] <- "26~50"}

    else if(CityData_Group_Copy$BadDebtNum[x] > 51 && CityData_Group_Copy$BadDebtNum[x] < 76)   
              {CityData_Group_Copy$BadDebtRange[x] <- "51~75"}

    else if(CityData_Group_Copy$BadDebtNum[x] > 75 && CityData_Group_Copy$BadDebtNum[x] < 101)  
              {CityData_Group_Copy$BadDebtRange[x] <- "76~100"}

    else if(CityData_Group_Copy$BadDebtNum[x] > 100)
              { CityData_Group_Copy$BadDebtRange[x] <- "100+"}


## Assign the result to the new column "CityData_Group_Copy$BadDebtRange" 

for(i in 1: nrow(CityData_Group_Copy) ){
  Range(i)
}
Run Code Online (Sandbox Code Playgroud)

我也试过这个解决方案:

Range <- function(x)
 switch (true) {
  case (CityData_Group_Copy$BadDebtNum[x] < 26): CityData_Group_Copy$BadDebtRange[x] <- "1~25"  break;
  case (CityData_Group_Copy$BadDebtNum[x] > 25 && CityData_Group_Copy$BadDebtNum[x] < 51): CityData_Group_Copy$BadDebtRange[x] <- "26~50"  break;
  case (CityData_Group_Copy$BadDebtNum[x] > 51 && CityData_Group_Copy$BadDebtNum[x] < 76): CityData_Group_Copy$BadDebtRange[x] <- "51~75"  break;
  case (CityData_Group_Copy$BadDebtNum[x] > 75 && CityData_Group_Copy$BadDebtNum[x] < 101): CityData_Group_Copy$BadDebtRange[x] <- "76~100"  break;
  case (CityData_Group_Copy$BadDebtNum[x] > 100): CityData_Group_Copy$BadDebtRange[x] <- "100+" break;
  }
Run Code Online (Sandbox Code Playgroud)

但似乎R中没有这样的语法.我收到了一个错误:

错误:"case(CityData_Group_Copy $ BadDebtNum [x]> 101)中意外'中断':CityData_Group_Copy $ BadDebtRange [x] < - "100+"break"*

那么有没有解决方案以简单的方式实现我的想法?

cba*_*are 5

看起来您正在对数据进行分箱,这可以通过cut函数完成:

bad_debt_num = sample(1:120, 100, replace=T)
cut(bad_debt_num, breaks=c(0, 25, 50, 75, 100, 1000))
Run Code Online (Sandbox Code Playgroud)

有关binning的更多信息,请参阅数据框中的生成箱.

R开关语句是相当有限.