在R中替换冗长的ifelse结构的最佳方法

BIC*_*ube 2 r

我有以下数据框架

df = data.frame(Code=seq(80,105,1))
Run Code Online (Sandbox Code Playgroud)

我需要添加另一个tCodeCode列计算的列.Code具有广泛的价值观.对于每个给定的范围,我需要具有特定值tCode.我无法使用cut函数来执行此任务.范围和预期结果给我.我只能想到这个冗长的ifelse结构:

  df$tCode = ifelse(df$Code > 102, 81, 
                            ifelse(df$Code %in% seq(101,102,1),80,
                                   ifelse(df$Code %in% seq(99,100,1),79,
                                          ifelse(df$Code %in% seq(97,89,1),78,
                                                 ifelse(df$Code %in% seq(95,96,1),77,
                                                        ifelse(df$Code %in% seq(92,94,1),76,
                                                               ifelse(df$Code %in% seq(90,91,1),75,
                                                                      ifelse(df$Code %in% seq(88,89,1),74,
                                                                             ifelse(df$Code %in% seq(86,87,1),73,
                                                                                    ifelse(df$Code %in% seq(84,85,1),72,
                                                                                           ifelse(df$Code %in% seq(82,83,1),71,
                                                                                                  ifelse(df$Code %in% seq(80,81,1),70,1))))))))))))
Run Code Online (Sandbox Code Playgroud)

我觉得这不是解决这个问题的最佳方法.还有更好的建议吗?

Mic*_*ico 5

想出一个匹配的表并合并.

为简洁起见,我会做前几个陈述,希望你明白这一点:

library(data.table); setDT(df)

match_table <- 
  data.table(Code = c(89:102),
             tCode = c(rep(78, 9), 79, 79, 80, 80))

df[match.table, tCode := tCode, on = "Code"]
Run Code Online (Sandbox Code Playgroud)