R “不知道如何解决”;“上下文堆栈溢出”;错误

R “不知道如何解决”;“上下文堆栈溢出”;错误,r,if-statement,nested,R,If Statement,Nested,我有一些数据如下所示: UniqueID MonthYear Count2 CCount 402ABC OCT2018 5 1 402ABC NOV2018 5 2 402ABC DEC2018 5 3 402ABC JAN2019 5 4 402ABC FEB2019 5 5

我有一些数据如下所示:

UniqueID MonthYear Count2 CCount
402ABC   OCT2018   5      1               
402ABC   NOV2018   5      2               
402ABC   DEC2018   5      3               
402ABC   JAN2019   5      4              
402ABC   FEB2019   5      5               
495DEF   FEB2019  10      1      
495DEF   MAR2019  10      2      
495DEF   APR2019  10      3      
495DEF   MAY2019  10      4     
495DEF   JUN2019  10      5     
495DEF   AUG2019  10      6     
495DEF   SEP2019  10      7     
495DEF   DEC2019  10      8    
495DEF   JAN2020  10      9    
495DEF   FEB2020  10     10    
UniqueID MonthYear Count2 CCount Corrected
402ABC   OCT2018   5      1      0         
402ABC   NOV2018   5      2      0          
402ABC   DEC2018   5      3      0         
402ABC   JAN2019   5      4      0        
402ABC   FEB2019   5      5      1         
495DEF   FEB2019  10      1      0
495DEF   MAR2019  10      2      0
495DEF   APR2019  10      3      0
495DEF   MAY2019  10      4      0
495DEF   JUN2019  10      5      0
495DEF   AUG2019  10      6      0
495DEF   SEP2019  10      7      0
495DEF   DEC2019  10      8      0
495DEF   JAN2020  10      9      0
495DEF   FEB2020  10     10      1
smd$Corrected=ifelse(smd$MonthYear=="OCT2018" & smd$Count2==1, 1,ifelse(
                     smd$MonthYear=="OCT2018" & smd$Count2 >1, 0,ifelse(
    
                     smd$MonthYear=="NOV2018" & smd$Count2==1, 1,ifelse(
                     smd$MonthYear=="NOV2018" & smd$Count2==smd$CCount, 1,ifelse(
                     smd$MonthYear=="NOV2018" & smd$Count2!=smd$CCount, 0,ifelse(
          
                     smd$MonthYear=="DEC2018" & smd$Count2==1, 1,ifelse(
                     smd$MonthYear=="DEC2018" & smd$Count2==smd$CCount, 1,ifelse(
                     smd$MonthYear=="DEC2018" & smd$Count2!=smd$CCount, 0,ifelse(
………………………


                     smd$MonthYear=="MAY2020" & smd$Count2==1, 1,ifelse(
                     smd$MonthYear=="MAY2020" & smd$Count2==smd$CCount, 1,ifelse(
                     smd$MonthYear=="MAY2020" & smd$Count2!=smd$CCount, 0,0
                                                                
             )))))))))))))))))))))))))))))))))))))))))))))))))))))
我想要的是能够创建一个名为“Corrected”的新列,找到UniqueID的最后一个实例。理想情况下,新数据如下所示:

UniqueID MonthYear Count2 CCount
402ABC   OCT2018   5      1               
402ABC   NOV2018   5      2               
402ABC   DEC2018   5      3               
402ABC   JAN2019   5      4              
402ABC   FEB2019   5      5               
495DEF   FEB2019  10      1      
495DEF   MAR2019  10      2      
495DEF   APR2019  10      3      
495DEF   MAY2019  10      4     
495DEF   JUN2019  10      5     
495DEF   AUG2019  10      6     
495DEF   SEP2019  10      7     
495DEF   DEC2019  10      8    
495DEF   JAN2020  10      9    
495DEF   FEB2020  10     10    
UniqueID MonthYear Count2 CCount Corrected
402ABC   OCT2018   5      1      0         
402ABC   NOV2018   5      2      0          
402ABC   DEC2018   5      3      0         
402ABC   JAN2019   5      4      0        
402ABC   FEB2019   5      5      1         
495DEF   FEB2019  10      1      0
495DEF   MAR2019  10      2      0
495DEF   APR2019  10      3      0
495DEF   MAY2019  10      4      0
495DEF   JUN2019  10      5      0
495DEF   AUG2019  10      6      0
495DEF   SEP2019  10      7      0
495DEF   DEC2019  10      8      0
495DEF   JAN2020  10      9      0
495DEF   FEB2020  10     10      1
smd$Corrected=ifelse(smd$MonthYear=="OCT2018" & smd$Count2==1, 1,ifelse(
                     smd$MonthYear=="OCT2018" & smd$Count2 >1, 0,ifelse(
    
                     smd$MonthYear=="NOV2018" & smd$Count2==1, 1,ifelse(
                     smd$MonthYear=="NOV2018" & smd$Count2==smd$CCount, 1,ifelse(
                     smd$MonthYear=="NOV2018" & smd$Count2!=smd$CCount, 0,ifelse(
          
                     smd$MonthYear=="DEC2018" & smd$Count2==1, 1,ifelse(
                     smd$MonthYear=="DEC2018" & smd$Count2==smd$CCount, 1,ifelse(
                     smd$MonthYear=="DEC2018" & smd$Count2!=smd$CCount, 0,ifelse(
………………………


                     smd$MonthYear=="MAY2020" & smd$Count2==1, 1,ifelse(
                     smd$MonthYear=="MAY2020" & smd$Count2==smd$CCount, 1,ifelse(
                     smd$MonthYear=="MAY2020" & smd$Count2!=smd$CCount, 0,0
                                                                
             )))))))))))))))))))))))))))))))))))))))))))))))))))))
我有一系列嵌套的ifelse函数用于在数据框中创建“Corrected”列。嵌套块如下所示:

UniqueID MonthYear Count2 CCount
402ABC   OCT2018   5      1               
402ABC   NOV2018   5      2               
402ABC   DEC2018   5      3               
402ABC   JAN2019   5      4              
402ABC   FEB2019   5      5               
495DEF   FEB2019  10      1      
495DEF   MAR2019  10      2      
495DEF   APR2019  10      3      
495DEF   MAY2019  10      4     
495DEF   JUN2019  10      5     
495DEF   AUG2019  10      6     
495DEF   SEP2019  10      7     
495DEF   DEC2019  10      8    
495DEF   JAN2020  10      9    
495DEF   FEB2020  10     10    
UniqueID MonthYear Count2 CCount Corrected
402ABC   OCT2018   5      1      0         
402ABC   NOV2018   5      2      0          
402ABC   DEC2018   5      3      0         
402ABC   JAN2019   5      4      0        
402ABC   FEB2019   5      5      1         
495DEF   FEB2019  10      1      0
495DEF   MAR2019  10      2      0
495DEF   APR2019  10      3      0
495DEF   MAY2019  10      4      0
495DEF   JUN2019  10      5      0
495DEF   AUG2019  10      6      0
495DEF   SEP2019  10      7      0
495DEF   DEC2019  10      8      0
495DEF   JAN2020  10      9      0
495DEF   FEB2020  10     10      1
smd$Corrected=ifelse(smd$MonthYear=="OCT2018" & smd$Count2==1, 1,ifelse(
                     smd$MonthYear=="OCT2018" & smd$Count2 >1, 0,ifelse(
    
                     smd$MonthYear=="NOV2018" & smd$Count2==1, 1,ifelse(
                     smd$MonthYear=="NOV2018" & smd$Count2==smd$CCount, 1,ifelse(
                     smd$MonthYear=="NOV2018" & smd$Count2!=smd$CCount, 0,ifelse(
          
                     smd$MonthYear=="DEC2018" & smd$Count2==1, 1,ifelse(
                     smd$MonthYear=="DEC2018" & smd$Count2==smd$CCount, 1,ifelse(
                     smd$MonthYear=="DEC2018" & smd$Count2!=smd$CCount, 0,ifelse(
………………………


                     smd$MonthYear=="MAY2020" & smd$Count2==1, 1,ifelse(
                     smd$MonthYear=="MAY2020" & smd$Count2==smd$CCount, 1,ifelse(
                     smd$MonthYear=="MAY2020" & smd$Count2!=smd$CCount, 0,0
                                                                
             )))))))))))))))))))))))))))))))))))))))))))))))))))))
我知道这不是最优雅的解决方案,但它符合我的目的。这只是我进行的一个更大分析的一部分。分析每月更新一次,每次更新时我都会向代码中添加一个新的块。今天,当我尝试更新代码时,出现以下错误:

Error: contextstack overflow at line 66
通过一点研究,我了解到当您使用太多嵌套的ifelse语句时,会出现此错误。关于StackOverflow的其他问题建议我使用sapply或mapply重写此代码。我在这里尝试了几个apply函数来重写我的代码,但似乎没有什么能很好地工作

有人能建议我如何重写代码,使其不使用所有嵌套的ifelse函数吗?任何帮助都将不胜感激


谢谢大家!

正如我在评论中提到的,我的建议是在
月日
删除逐行条件反射,似乎你真的不需要这样做

如果有必要在
月份进行调节
,则最好使用

smd$MonthYear %in% c("OCT2018", "NOV2018" ...)

在您的
ifelse

中,您似乎不需要对
MonthYear
进行所有的条件设置,或者如果您这样做,您可以在%c(“OCT2018”、“NOV2018”…)中说
smd$MonthYear%,这可以大大降低
ifelse
的复杂性,天哪,我是个白痴!非常感谢你的回答!工作得很有魅力!如果你点击下面的“回答问题”并写出同样的内容,我可以给你分数。