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"*
那么有没有解决方案以简单的方式实现我的想法?
看起来您正在对数据进行分箱,这可以通过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开关语句是相当有限.