首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不确定如何解决"Contextstack overflow“错误

不确定如何解决"Contextstack overflow“错误
EN

Stack Overflow用户
提问于 2020-07-21 22:09:35
回答 1查看 24关注 0票数 0

我有一些数据,如下所示:

代码语言:javascript
复制
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的最后一个实例。理想情况下,新数据应如下所示:

代码语言:javascript
复制
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

我有一系列嵌套的ifelse函数,用于在我的数据框中创建“已更正”列。嵌套的块如下所示:

代码语言:javascript
复制
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
                                                                
             )))))))))))))))))))))))))))))))))))))))))))))))))))))

我知道这不是最优雅的解决方案,但它能达到我的目的。这只是我正在运行的一个更大的分析的一部分。分析每月更新一次,每次更新代码时,我都会添加一个新的块。今天,当我尝试更新代码时,我得到了以下错误:

代码语言:javascript
复制
Error: contextstack overflow at line 66

通过一些研究,我了解到当您使用太多嵌套的ifelse语句时,会弹出这个错误。StackOverflow上的其他问题建议我使用sapply或mapply来重写这段代码。我在这里尝试了几个应用函数来重写我的代码,但似乎都不能很好地工作。

有没有人会建议我如何重写代码,以避免使用所有嵌套的ifelse函数?任何帮助都将不胜感激!

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-22 20:46:48

正如我在评论中提到的,我的建议是删除MonthYear上的逐行限制,看起来您并不真的需要这样做。

如果有必要以MonthYear为条件,则最好使用

代码语言:javascript
复制
smd$MonthYear %in% c("OCT2018", "NOV2018" ...)

在你的ifelse里。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63016422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档