R- Ifelse在for循环中有可能的组合

时间:2017-04-13 18:35:04

标签: r function for-loop if-statement combinatorics

我在编码条件变量时遇到了一些麻烦。这有点难以解释,我提供的一些/大部分代码在某种意义上都是伪的...我试图解释我的逻辑和我想要发生的事情。我正在使用R studio和R v.3.3作为Windows 7 PC的基础。

我想基于21个字符变量的值创建变量“member_engagement_level”。

我尝试对ifelse语句进行硬编码,但是它太疯狂而冗长,以至于我无法继续使用它。

我认为创建一个在for循环和ifelse语句中使用组合子的函数可以实现这个目的吗?...

这里是我的硬编码ifelse的片段(为了让你了解音量),我没有使用R中的choose函数来创建组合,只是硬编码:

page$member_engagement_level<-ifelse(page$event1 != "" | page$event2 != "" |
                                    {19 more statements with | operator} ,"minimum",
                                     ifelse( {21 statements} , "medium",
                                          ifelse( {21 statements with & and | operator}, "high",
                                              ifelse({56 statements include combination of events (total statements = 1 + from 4 events choose 2 + from 8 events choose 2 + from 7 events choose 2 = 1 + 6 + 28 + 21)}, "very high",
                                                   ifelse({96 statements (1 + 4 choose 3 + 8 choose 3 + 7 choose 3 = 82)}, "max", ""))))) 

正如你可以告诉硬编码这个逻辑变得非常长,并且不容易看到和完成

我真的很喜欢简洁的功能,但我很困惑如何将for循环和ifelse语句结合使用(没有在网上找到任何东西来帮助解决这部分问题)。例如,仅针对“member_engagement_level”=“最小”级别,

engaged<-function (X) { for (i in 1:ncol(major_event_vars) {
                       level<- ifelse(X[[i]] != "" | 
                                for (j in 1:ncol(involve_vars) {
                                      ifelse(X[[j]] == "I did this" | ...
                                          "minimum", "")
                        return(level)
                      } 
                    }
                   }  

也就是说,如果任何X [[i]]!=“”或==“我这样做”或%in%c(“总是”,“常常”),则声明= true。 for循环应该嵌套在给定级别的“member_engagement_level”中!(尽管这里写的是这样的) 我知道这不会有效,但我想在这里强调我的麻烦。 1.)如何简洁地编写条件以使用|遍历所有期望的变量和&amp;运算符,此外,某些变量的条件是不同的(statement = true对输入有效!=“”,==“我这样做了”,%c在%c(“总是”,经常))

2。)对于组合语句...如何将其合并到for循环和ifelse语句中(如果这些语句本身是可能的话)? 我希望它是那种类型(这是真正的伪代码,我甚至不知道从哪里开始):

    for (event in 1:(specific_event_cateogry)) { 
        ifelse((x[[event]] %in% c("Always", "Often") & X[[event+1]] %in% 
              c("Always", "Often")) | ((x[[event]] %in% c("Always", "Often") 
              & X[[event+2]] %in% c("Always", "Often")) | ... | (X[[event +
              (ncol(specific_event_category) - 1)]] %in% c("Always", 
              "Often") & x[[event + ncol(specific_event_category)]] %in% 
              c("Always","Often")), "high", ~more ifelse statements~)              

对于上面的块,应该有7个选择2个以|分隔的语句运营商。我可以用选择功能缩短这个吗? (我知道使用X [[event + i]]的for循环的方式是错误的,我只想展示我的逻辑,但也请帮助它!)

我理解这个问题本身有点令人困惑所以请问任何问题,我会尽力澄清。任何帮助深表感谢。或者指出我正确的方向......

谢谢!

-John

0 个答案:

没有答案