gpt4 book ai didi

R:从具有重复制表符的制表符分隔文件中读取数据

转载 作者:行者123 更新时间:2023-12-04 12:32:20 25 4
gpt4 key购买 nike

我需要将一个非常大的制表符分隔文本文件读入 R(大约 2 GB)。问题是该文件包含大量重复的选项卡(两个后续选项卡之间没有任何内容)。它们似乎引起了麻烦,因为它们中的(一些?)被解释为行尾。

由于数据量很大,我上传了一小部分来说明问题,请看下面的代码。

count.fields(file = "http://m.uploadedit.com/ba3c/1429271380882.txt", sep = "\t")
read.table(file = "http://m.uploadedit.com/ba3c/1429271380882.txt",
header = TRUE, sep = "\t")

感谢您的帮助。

编辑

编辑:这个例子并没有完美地说明原来的问题。对于整个数据,我应该每行总共有 6312 个字段,但是当我对其执行 count.fields() 时,行被分解为 4571 - 1741 - 4571 - 1741 - 。 .. 模式,因此在字段编号 4571 之后有一个额外的行尾。

最佳答案

似乎有 \n 字符串随机散布在列名中。如果我们使用 substr()gregexpr() 在文件中查找前 5 次左右出现的 \n,结果看起来很奇怪:

library(readr) # useful pkg to read files
df <- read_file("http://m.uploadedit.com/ba3c/1429271380882.txt")

> substr(df, gregexpr("\n", df)[[1]][1]-10, gregexpr("\n", df)[[1]][1]+10)
[1] "1-024.Top \nAlleles\tCF"

> substr(df, gregexpr("\n", df)[[1]][2]-10, gregexpr("\n", df)[[1]][2]+10)
[1] "053.Theta\t\nCFF01-053."

> substr(df, gregexpr("\n", df)[[1]][3]-10, gregexpr("\n", df)[[1]][3]+10)
[1] "CFF01-072.\nTop Allele"

> substr(df, gregexpr("\n", df)[[1]][4]-10, gregexpr("\n", df)[[1]][4]+10)
[1] "CFF01-086.\nTheta\tCFF0"

> substr(df, gregexpr("\n", df)[[1]][5]-10, gregexpr("\n", df)[[1]][5]+10)
[1] "ype\tCFF01-\n303.Top Al"

因此,问题显然不是两个连续的 \t,而是随机分散的换行符。这显然会导致 read.table 解析器崩溃。

但是:如果随机分散的换行符是问题所在,让我们将它们全部移除并插入到正确的位置。以下代码将正确读取发布的示例数据。您可能需要为 ID_REF 变量想出一个更好的正则表达式,以在 ID 字符串变化超过在示例数据中:

library(readr)

df <- read_file("http://m.uploadedit.com/ba3c/1429271380882.txt")

df <- gsub("\n", "", df)
df <- gsub("abph1", "\nabph1", df)
df <- read_delim(df, delim = "\t")

关于R:从具有重复制表符的制表符分隔文件中读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29698665/

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