Если вы разделите каждое из полей standard
и superficial.match
, чтобы получить векторы их компонентных символов, вы можете сравнить каждую пару с обычным оператором ==
.
Я предполагаю, что эти поля являются строками, а не числами c.
Эта функция выполняет разбиение, проверяет, больше ли число мест, в которых найдено совпадение, больше 0, а затем, для каждого совпадающего символа, проверяет, сколько раз это происходит в столбце standard
для возврата логического значения, если число совпадений> = 2.
fn <- function(x) {
x1 <- unlist(strsplit(x[1], ''))
x2 <- unlist(strsplit(x[2], ''))
cmp <- x1 == x2
mips <- sum(cmp) > 0
if (mips) {
two.match <- max(rowSums(outer(x1[cmp], x1, FUN = '=='))) >= 2
} else {
two.match <- FALSE
}
c(mips = mips, two.match = two.match)
}
Вы можете запустить его строка за строкой в матрице x
и транспонировать в попасть в столбчатый формат:
t(apply(x, 1, fn))
mips two.match
[1,] TRUE TRUE
[2,] FALSE FALSE
[3,] TRUE TRUE
[4,] TRUE TRUE
[5,] TRUE TRUE
[6,] TRUE FALSE