我在编码条件变量时遇到了一些麻烦。这有点难以解释,我提供的一些/大部分代码在某种意义上都是伪的...我试图解释我的逻辑和我想要发生的事情。我正在使用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