【问题标题】:efficiently parse binary input in R有效地解析 R 中的二进制输入
【发布时间】:2023-03-20 18:56:01
【问题描述】:

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

目前我正在使用

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

找到其中存在第 1 行等于 1 且第 2 行等于 1 以及第 1 行等于 0 且第 2 行等于 0 的实例的实例的点。对于 70k 列而言,这需要相当多的时间

【问题讨论】:

  • 我假设这是一个单列,列类是字符还是多列(基于您最近提出的另一个问题)
  • @akrun 不抱歉,这些都是不同的列...所以每个数字 0 1 等等都在 df 的不同列中
  • 您不需要区别。这会更快吗which(df1[1,]==df1[2,])
  • @akrun 两个解决方案建议都没有超过 20 分钟,这对于这样一个向量(1.8 万值)来说有点长......只是确定它是 1,1 还是 00 的实例

标签: r matrix dataframe


【解决方案1】:

您可以通过转置将其转换为矩阵。好像很快

 system.time({ m1 <- t(df1)
              which(m1[,1]==m1[,2])})
 #  user  system elapsed 
 #  0.31    0.00    0.31 

unlist

 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"))

【讨论】:

  • 数据框是一个列表,我怀疑这可能会减慢操作速度。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-04
  • 2018-06-29
相关资源
最近更新 更多