У меня есть вывод, например, как показано ниже:
ID C1 C2 C3 C4 C5 C6
1 0 1 2 2 1 1
2 0 1 1 2 1 1
3 1 0 1 1 1 1
4 2 0 2 2 1 2
5 2 1 1 0 2 2
6 1 2 1 0 1 2
7 2 2 2 2 0 2
8 1 1 1 1 0 1
9 1 1 2 2 2 0
10 1 2 1 2 1 0
, и я определяю одновременное появление объектов на примере из более быстрого способа сравнения строк во фрейме данных
for ( i in 1:(nr-1)) {
# all combinations of i with i+1 to nr
samplematch <- cbind(dt[i],dt[(i+1):nr])
# renaming the comparison sample columns
setnames(samplematch,append(colnames(dt),paste0(colnames(dt),"2")))
#calculating number of matches
samplematch[,noofmatches := 0]
for (j in 1:nc){
samplematch[,noofmatches := noofmatches+1*(get(paste0("CC",j)) == get(paste0("CC",j,"2")))]
}
# removing individual value columns and matches < 5
samplematch <- samplematch[noofmatches >= 5,list(ID,ID2,noofmatches)]
# adding to the list
totalmatches[[i]] <- samplematch
}
Результат, полученный с помощью вышеуказанной функции, помогает мне определить общее совпадение между каждым идентификатором.Однако я должен идентифицировать соответствующий идентификатор только тогда, когда CC (1: 6) состоит только из значений 1 и 2. Это означает, что общее значение для каждой строки должно быть 5, а не 6.
Выход, который яrequire должен содержать такую информацию, как
ID1 ID2 Match
1 2 4/5
1 3 2/5
1 4 3/5
: : :
: : :
2 3 3/5
2 4 2/5
Как должна быть написана функция без удаления каких-либо строк, поскольку каждая строка имеет значение 0.