Я пытаюсь фильтровать перекрывающиеся строки в большом файле с R. Степени перекрытия задаются как 25%. Другими словами, число элементов пересечения между любыми двумя строками меньше, чем 0,25 раз их объединения. Если более 0,25, одна строка удаляется. Поэтому, если у меня есть большой файл с 1000 000 строк, первый 5 строк являются следующие:Как фильтровать перекрывающиеся строки в большом файле с помощью R
с6 C24 C32 C54 C67
с6 C24 C32 C51 C68 C78
с6 C32 C54 C67
с6 C32 C55 C63 C85 C94 C75
с6 C32 C53 C67
Поскольку количество элементов пересечения между 1-й строкой и 2-й строкой 3 (например, c6, c24, c32), число соединений между ними равно 8 (например, c6, c24, c32, c54, c67, c51, c68, c78) , 3/8 = 0,375> 0,25, вторая строка удалена. Также выполните 3-й и 5-й ряды. Окончательный ответ - 1-я и 4-я строки.
с6 C24 C32 C54 C67
с6 C32 C55 C63 C85 C94 C75
код псевдо следующим образом:
for i=1:(n-1) # n is the number of rows of a file for j=(i+1):n if overlap degrees of the ith row and jth row is more than 0.25 delete the jth row from the file end end
конец
Анализатор R код следующим образом:
con<-file("inputfile.txt","r") fileConn<-file("outputfile025.txt") data<-readLines(con,n=1) con1<-strsplit(data,"\t") writeLines(con1[[1]][], fileConn) for(i in 2:1000000){ data<-readLines(con,n=1) con2<-strsplit(data,"\t") intersect=length(intersect(con1[[1]][],con2[[1]][])) union =length(union(con1[[1]][],con2[[1]][])) if ((intersect/union)<0.25){ writeLines(con2[[1]][], fileConn) } } close(con) close(fileConn)
Проблема заключается в том, что приведенный выше код может быть использован только для фильтрации перекрытия между 1-й строкой и любыми другими строками, как фильтровать перекрытие между 2-м, 3, ...... строки и любые другие строки. Кто-нибудь знает, как решить эту проблему? Спасибо!
Это не совсем ясно для меня ... После первой строки сравнивается со всеми другими, вы хотите сравнить вторую строку для всех остальных? Затем третий ряд? Если да, notd, что конечный результат будет зависеть от порядка сравниваемых строк. Например. результат сравнения строк 1, 2, 3 может отличаться, если вы сравниваете строки в порядке 1, 3, 2 –
. Вы можете использовать 'expand.grid' для получения комбинаций строк (остерегайтесь дубликатов) и прокручивать их. –
Я не уверен, что ваша проблема хорошо указана. Например, после того, как вы фильтруете файл со сравнением с первой строкой, начнете ли вы с уже обрезанного файла?Или будет ли сравнение со второй строкой еще одним выходным файлом? – asb