R滤波逻辑

R滤波逻辑,r,filter,logic,conditional-statements,R,Filter,Logic,Conditional Statements,需要了解如何修复此过滤逻辑 test.session <- c("A","A","A","B","B","B") test.start_flag <- c("1","0","0","1","0","0") test.url <- c("in_list","in_field","out","not_in_list","in_field","out") test.code_map <- 'tbd' test.manual_map <- c("1","1","0","0"

需要了解如何修复此过滤逻辑

test.session <- c("A","A","A","B","B","B")
test.start_flag <- c("1","0","0","1","0","0")
test.url <- c("in_list","in_field","out","not_in_list","in_field","out")
test.code_map <- 'tbd'
test.manual_map <- c("1","1","0","0","0","0")
test.df <- data.frame(test.session, test.start_flag, test.url, test.code_map, test.manual_map)

test.session理解您想要的内容有点混乱,但是如果一个测试会话有一个test.url“not_in_list”,那么该测试会话的所有test.code_映射都应该是0。如果是这样,这应该是可行的

test.df$test.code_map<-ifelse(
  ((test.df$test.start_flag == 1 & test.df$test.url=="in_list")|
  (test.df$test.start_flag == 0 & test.df$test.url=="in_field"& test.df$test.session!="B") &
    !test.session %in% test.df$test.session[test.df$test.url=="not_in_list"]),
  1, 0)

test.df$test.code\u映射您在段落中说“如果开始标志为0,url为“in\u字段”,则代码映射等于1(完成)”,然后说“如果开始标志为0,url为“in\u字段”,则代码映射等于0”。你想要哪一个?它是否依赖于test.session?它依赖于start.flag和url。因此,如果开始标志等于1,url等于“not_in_list”,那么对于该会话中的所有url,我需要代码返回一个0,即使开始标志为0,url为“in_field”,因为开始url不在建议的列表中是的-如果我们只是在这个测试片段上运行代码,这是非常有效的。我需要在300k+会话ID上运行此代码,因此当我们编写test.code_映射时,它必须在每个会话上都是动态的。但是逻辑是正确的,每次有一个新会话名称的起始url不等于“in_list”的值,那么对于该特定会话测试中的每一行。code_map必须等于0实际上我现在正在测试它,它看起来不错!我们采取了不同的方法,但这使它更干净,更容易,谢谢!谢谢它做了一些小调整!我需要向数据集添加一个结束标志,我可以很容易地这样做(如果url是会话中的最后一个url,则为1,否则为0)。如果end_标志等于“1”且url为“out”,我们如何调整此代码以使test.code_映射等于1?这将是对上述代码的一个添加。这非常简单,只需将逻辑测试(test.df$test.code_map==1&test.df$test.url==out)添加到上述代码中即可。你可以把它放在最后一个“&”标志之前的任何地方。谢谢*****(test.df$**end_标志**==1和test.df$test.url==“out”)