gpt4 book ai didi

r - 将制表符分隔的数据解析为 R data.table/data.frame 时如何排除某些行?

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

这个问题与以下问题有关:

How to parse tab-delimited data (of different formats) into a data.table/data.frame?

我有一个格式错误的文本文件,其中以制表符分隔的格式如下:

A   1092    -   1093    +   1X
B 1093 HRDCPMRFYT
A 1093 + 1094 - 1X
B 1094 BSZSDFJRVF
A 1094 + 1095 + 1X
B 1095 SSTFCLEPVV
...

但是,文本文件中有几行长行,它们在技术上以制表符分隔,但都是长字符串。例如这里的“Z”和“Y”行
Z  FX:E:4.2
Y 23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M
A 1092 - 1093 + 1X
B 1093 HRDCPMRFYT
A 1093 + 1094 - 1X
B 1094 BSZSDFJRVF
A 1094 + 1095 + 1X
B 1095 SSTFCLEPVV
...

该文本文件的一部分是 Y 23434M,23434M,...可能有几 GB 长。

这些行非常罕见,仅用前面的 Z 标记。或 Y .我目前在文本编辑器中打开了该文件并删除了这些行。

然而,这在算法上是不合理的。有没有办法解析这个文件,使得 (1) 只有行 AB使用或 (2) 行 ZY明确没有使用?

编辑:澄清一下,Z 不是一个长字符串。这里只有“Y”是一个长字符串。是格式为 X XX:X:0.0 的字符串, 由此 X是一个字符和 0一个整数。

最佳答案

您可以使用系统调用来修复文件,例如 sed ,按一定的模式。如果要删除所有以 Z 开头的行或 Y你可以简单地传递一个正则表达式,后跟 /d

system("sed -i '/^[ZY]/d' test.tab")

上面的命令将从您的文件中删除所有以 Z 或 Y 开头的行。然后,您可以运行我在上一个问题中发布的相同代码
library(data.table)
fread("sed '$!N;s/\\n/ /' test.tab")
# V1 V2 V3 V4 V5 V6 V7 V8
# 1: A 1092 - 1093 + 1X B 1093 HRDCPMRFYT
# 2: A 1093 + 1094 - 1X B 1094 BSZSDFJRVF
# 3: A 1094 + 1095 + 1X B 1095 SSTFCLEPVV

数据
text <- "Z FX:E:4.2
Y 23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M,23434M
A 1092 - 1093 + 1X
B 1093 HRDCPMRFYT
A 1093 + 1094 - 1X
B 1094 BSZSDFJRVF
A 1094 + 1095 + 1X
B 1095 SSTFCLEPVV"

# Saving it as tab separated file on disk
write(gsub(" +", "\t", text), file = "test.tab")

关于r - 将制表符分隔的数据解析为 R data.table/data.frame 时如何排除某些行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50316300/

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