使用嵌套的ifelse计算嵌套循环中的正确输出

时间:2016-07-16 09:29:19

标签: r

有几天我试图获得嵌套ifelse和嵌套循环组合的正确计数输出。我想我的嵌套是完全错误的,或者我尝试计算输出的方式,也许两者都是。

ifelse.1 = function(input_matrix) {

  result = 1
  output = 0
  sum_output = 0

  for(i in 1:dim(input_matrix)[1]){
    for(j in 1:dim(word_list_matrix-one)[1]){
      for(k in 1:dim(word_list_matrix_two)[1]){

  ifelse(str_detect(input_matrix[i], ("word")) == TRUE 
  &  str_detect(input_matrix[i], word_list_matrix_one[j]) == TRUE
     &  str_detect(input_matrix[i], word_list_matrix_two[k]) == TRUE,
           output[i] <- output[i] + result, 
  ifelse(
     str_detect(input_matrix[i], word_list_matrix_three[j]) == TRUE
     &  str_detect(input_matrix[i], word_list_matrix_two[k]) == FALSE,
           output[i] <- output[i] + result, NA))

        sum_output = output[i]
    } # k-loop
  } # j-loop
} # i-loop
  return(sum_output)
}

代码是关于在多个一列矩阵的多行中检测某些字符串(通过包str_detect的{​​{1}}函数)。 因此,在stringr的{​​{1}} row [i]中,应检测input_matrixrow [j]提供的字符串。

每当上述ifelse中的一个为真时,应将+1加到输出中,在所有i循环结束时,应返回输出的总和。

问题是我得到word_list_matrix作为答案,或者(对于此代码的某些变体)我得到的输出数量超过了我提供的输入。

我知道ifelse应该能够计算向量,这可能导致不需要循环,但是尽管我从来没有这样做,但我必须计算的矩阵长度不一样。

我希望我能够提供一个具有足够细节的良好,可重复的问题。 非常感谢你的时间。

1 个答案:

答案 0 :(得分:0)

你可以使用它。

one <- as.data.frame(apply(df, 2, function(x) {
    str_detect(x, paste(word_list_matrix, sep = '|', collapse = '|'))
}))

two <- as.data.frame(apply(df, 2, function(x) {
  str_detect(x, paste(word_list_matrix_two, sep = '|', collapse = '|'))
}))

three <- as.data.frame(apply(df, 2, function(x) {
  str_detect(x, paste(word_list_matrix_three, sep = '|', collapse = '|'))
}))

which(one & two & three, TRUE)

结果将是原始矩阵中元素的行号和列号,其中包含所有三个word_lists中的至少一个单词。如果你想检查另一个条件,例如该单词是否属于列表1&amp;&amp; 2 ||列表3,您可以相应地更改最后一行,例如

which(one & two | three, TRUE)