【问题标题】:Avoiding nested ifelse without using "dplyr" library [duplicate]在不使用“dplyr”库的情况下避免嵌套 ifelse [重复]
【发布时间】:2019-06-07 09:10:35
【问题描述】:

实际上,我想为每个 credit_category 分配一个特定的风险权重。

我一直在使用嵌套 ifelse,如下所示,但我正在尝试寻找其他东西以避免嵌套,而不使用“dplyr”库。 有什么想法吗?

tab_nonsec$RW = ifelse(tab_nonsec$credit_category=="AAA", 0.005,
                       ifelse(tab_nonsec$credit_category=="AA", 0.02,
                       ifelse(tab_nonsec$credit_category=="A", 0.03,
                       ifelse(tab_nonsec$credit_category=="BBB", 0.06,
                       ifelse(tab_nonsec$credit_category=="BB", 0.15,
                       ifelse(tab_nonsec$credit_category=="B", 0.3,
                       ifelse(tab_nonsec$credit_category=="CCC", 0.5,
                       ifelse(tab_nonsec$credit_category=="Unrated", 0.75,
                       ifelse(tab_nonsec$credit_category=="Defaulted",1,0
                       )))))))))

【问题讨论】:

  • 你在找cut
  • 或者先创建一个lookup table再合并。
  • findInterval 可能会有所帮助。
  • 为什么重新打开?这显然是 cut 的骗局
  • @Sotos OP 将字符映射到数字,而不是相反...仍然肯定重复的问题。

标签: r if-statement vectorization


【解决方案1】:
car::recode(test, '"AAA"=0.005;
                  "AA"=0.02;
                  "A"=0.03;
                  "BBB"=0.06;
                  "BB"=0.15;
                  "B"=0.3;
                  "CCC"=0.5;
                  "Unrated"=0.75;
                  "Defaulted"=1')

recode 函数非常易于使用。

【讨论】:

  • 如果我有很多类别要重新编码,我可能会尝试在 csv 中获取类别并使用矢量化 mutate 函数来重新编码我的数据:-)
【解决方案2】:

您可以使用命名向量来制作查找表:

lut <- c(
  "AAA" = 0.005, "AA" = 0.02, "A" = 0.03, 
  "BBB" = 0.06, "BB" = 0.15, "B" = 0.3, 
  "CCC" = 0.5, 
  "Unrated" = 0.75, 
  "Defaulted" = 1
)

tab_nonsec$RW <- lut[tab_nonsec$credit_category]
tab_nonsec$RW[is.na(tab_nonsec$RW)] <-0

#   credit_category    RW
# 1              AA 0.020
# 2             CCC 0.500
# 3             AAA 0.005
# 4               B 0.300
# 5             AAA 0.005
# 6       Defaulted 1.000
# 7             BBB 0.060
# 8             BBB 0.060
# 9          errror 0.000

# Example data:

tab_nonsec <- data.frame(credit_category = c("AA", "CCC", "AAA", "B", "AAA", "Defaulted", "BBB", "BBB", "errror"), stringsAsFactors = FALSE)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    • 2019-07-22
    • 2018-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多