gpt4 book ai didi

r - 在R中解析复杂的文本文件

转载 作者:行者123 更新时间:2023-12-05 06:33:41 27 4
gpt4 key购买 nike

我正在寻找解析 R 中的文本文件以作为 data.frame 加载。我有一个包含固定宽度数据的长文本文件,由节 (ID) 和小节 (SUB) 分隔。每个部分的长度是可变的。我正在寻找创建两个数据框,一个用于 ID 部分,一个用于 SUB 部分。示例数据如下:

Header 1
METRIC 0.30 10.00
ID K0107050 Aa
0.06 15.24 14.40 14.40 7.13 0.13 0.19 1
0.17 14.35 13.57 13.57 6.40 0.12 0.18 1

SUB
1.000 1.000 0.093 0.11 0.11 301
1.000 1.000 0.093 0.11 0.11 61
ID K0129050 Aa
0.06 26.35 24.90 24.90 10.88 0.62 0.88 1
0.15 25.35 23.96 23.96 10.93 0.55 0.74 1

SUB
3.000 3.000 0.506 0.53 0.53 102
4.000 4.000 0.514 0.55 0.55 118

我想要的数据框是:

DF1

Header 1    K0107050    Aa    0.06    15.24    14.40    14.40     7.13     0.13     0.19  1
Header 1 K0107050 Aa 0.17 14.35 13.57 13.57 6.40 0.12 0.18 1
Header 1 K0129050 Aa 0.06 26.35 24.90 24.90 10.88 0.62 0.88 1
Header 1 K0129050 Aa 0.15 25.35 23.96 23.96 10.93 0.55 0.74 1

DF2

Header 1    K0107050    Aa  1.000   1.000  0.093  0.11  0.11 301
Header 1 K0107050 Aa 1.000 1.000 0.093 0.11 0.11 61
Header 1 K0129050 Aa 3.000 3.000 0.506 0.53 0.53 102
Header 1 K0129050 Aa 4.000 4.000 0.514 0.55 0.55 118

到目前为止,我已经使用了 readLines(),但在那之后卡住了,因为文本文件中有不同的部分。谢谢

最佳答案

这是开始(抱歉该 sleep 了...):

x <- readLines("myFile.txt")

library(dplyr)

bind_rows(
lapply(split(x, cumsum(grepl("Header|Metric|ID|SUB", x))), function(i){
i1 <- i[ i != "" ]
nums <- unlist(strsplit(tail(i1, -1), " "))
res <- cbind.data.frame(Grp = i1[1],
matrix(na.omit(as.numeric(nums)),
nrow = length(i1) - 1, byrow = TRUE),
stringsAsFactors = FALSE)

res
})
)

# Grp 1 2 3 4 5 6 7 8
# 1 Header 1 0.30 10.00 NA NA NA NA NA NA
# 2 ID K0107050 Aa 0.06 15.24 14.400 14.40 7.13 0.13 0.19 1
# 3 ID K0107050 Aa 0.17 14.35 13.570 13.57 6.40 0.12 0.18 1
# 4 SUB 1.00 1.00 0.093 0.11 0.11 301.00 NA NA
# 5 SUB 1.00 1.00 0.093 0.11 0.11 61.00 NA NA
# 6 ID K0129050 Aa 0.06 26.35 24.900 24.90 10.88 0.62 0.88 1
# 7 ID K0129050 Aa 0.15 25.35 23.960 23.96 10.93 0.55 0.74 1
# 8 SUB 3.00 3.00 0.506 0.53 0.53 102.00 NA NA
# 9 SUB 4.00 4.00 0.514 0.55 0.55 118.00 NA NA

关于r - 在R中解析复杂的文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50633007/

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