有几天我试图获得嵌套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_matrix
中row [j]
提供的字符串。
每当上述ifelse中的一个为真时,应将+1加到输出中,在所有i循环结束时,应返回输出的总和。
问题是我得到word_list_matrix
作为答案,或者(对于此代码的某些变体)我得到的输出数量超过了我提供的输入。
我知道ifelse应该能够计算向量,这可能导致不需要循环,但是尽管我从来没有这样做,但我必须计算的矩阵长度不一样。
我希望我能够提供一个具有足够细节的良好,可重复的问题。 非常感谢你的时间。
答案 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)