gpt4 book ai didi

高效地将二进制数据读入 R

转载 作者:行者123 更新时间:2023-12-02 01:14:35 25 4
gpt4 key购买 nike

从文本文件中,我正在读取如下结构的二进制数据:

0101010100101010101010101010
1010101001010101010101010111
1111101010101010100101010101

该文件有 800 行。每行的长度都相同(但文件之间的长度有所不同,因此对其进行硬编码没有意义)。我希望输入存储在数据框中,其中每一行都是一行,每两个数字存储在不同的列中,例如:

col1 col2 col3 col4
0 1 0 1

目前我正在这样做

as.matrix(read.table(text=gsub("", ' ', readLines("input"))))->g

但是,这需要很长时间,因为每行大约有 70,000 个 0/1。

有没有更快的方法来做到这一点?

最佳答案

您可以使用 awk 进行管道

read.table(pipe("awk '{gsub(/./,\"& \", $1);print $1}' yourfile.txt"))
# V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17 V18 V19 V20 V21
#1 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 1 0 1
#2 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 1 0 1 0
#3 1 1 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 1 0
# V22 V23 V24 V25 V26 V27 V28
#1 0 1 0 1 0 1 0
#2 1 0 1 0 1 1 1
#3 1 0 1 0 1 0 1

或者

read.table(pipe("awk '{gsub(\"\",\" \", $1);print $1}' yourfile.txt"))

fread 也可以与 awk 结合使用

library(data.table)
fread("awk '{gsub(/./,\"&,\", $1);print $1}' yourfile.txt")

使用与 OP 数据集类似的数据集,

library(stringi)
write.table(stri_rand_strings(800,70000, '[0-1]'), file='binary1.txt',
row.names=FALSE, quote=FALSE, col.names=FALSE)

system.time(fread("awk '{gsub(/./,\"&,\", $1);print $1}' binary1.txt"))
# user system elapsed
#16.444 0.108 16.542

关于高效地将二进制数据读入 R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30149227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com