我正在尝试使用 R 过滤大文件中的重叠行。重叠度设置为 25%。换句话说,任何两行之间的交集元素的数量小于它们并集的0.25倍。如果大于0.25,则删除一行。所以如果我有一个总共有1000 000行的大文件,第一个5行如下:
c6 c24 c32 c54 c67
c6 c24 c32 c51 c68 c78
c6 c32 c54 c67
c6 c32 c55 c63 c85 c94 c75
c6 c32 c53 c67
因为第 1 行和第 2 行相交的元素个数为 3(如 c6,c24,c32),所以它们之间的并集数为 8,(如 c6,c24,c32,c54,c67,c51 ,c68,c78),3/8=0.375 > 0.25,第2行被删除。第3和第5行也是如此。最终答案是第1和第4行。
c6 c24 c32 c54 c67
c6 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)
问题是上面的代码只能用于过滤第一行和任何其他行之间的重叠,如何过滤第二、第三、……行和任何其他行之间的重叠。有谁知道如何解决这个问题?谢谢!