高效解析R中的二进制输入

高效解析R中的二进制输入,r,matrix,dataframe,R,Matrix,Dataframe,在R中,我有两行数据帧 每个数字本身都存储在一个单独的列中 目前我正在使用 unname(which(df[1,]-df[2,]==0))->hte 要查找存在第1行等于1、第2行等于1的实例以及第1行等于0、第2行等于0的实例的点。对于70k cols来说,这需要相当多的时间,您可以通过转置将其转换为矩阵。好像很快 system.time({ m1 <- t(df1) which(m1[,1]==m1[,2])}) # user system

在R中,我有两行数据帧 每个数字本身都存储在一个单独的列中

目前我正在使用

unname(which(df[1,]-df[2,]==0))->hte

要查找存在第1行等于1、第2行等于1的实例以及第1行等于0、第2行等于0的实例的点。对于70k cols来说,这需要相当多的时间,您可以通过转置将其转换为矩阵。好像很快

 system.time({ m1 <- t(df1)
              which(m1[,1]==m1[,2])})
 #  user  system elapsed 
 #  0.31    0.00    0.31 
数据
库(stringi)
table(stri_rand_字符串(27000,[0-1]),file='binary1.txt',
row.names=FALSE,quote=FALSE,col.names=FALSE)

df1我假设这是一个单列,列类为character,还是多列(基于您最近提出的另一个问题)@akrun no sorry这些都是不同的列…所以每个数字0 1等都在df1的不同列中。您不需要差异。这会更快吗
哪个(df1[1,]==df1[2,])
@akrun这两个解决方案建议都没有花费超过20分钟,这对于这样一个向量(1.8mil值)来说有点长…只是为了确定它是1,1还是00A数据帧的实例是一个列表,我怀疑这可能会减慢操作。
 system.time(which(unlist(df1[1,])==unlist(df1[2,])))
 #   user  system elapsed 
 #  1.175   0.002   1.177 
library(stringi)
write.table(stri_rand_strings(2, 70000, '[0-1]'), file='binary1.txt', 
           row.names=FALSE, quote=FALSE, col.names=FALSE)
df1 <- read.table(pipe("awk '{gsub(/./,\"& \", $1);print $1}' binary1.txt"))