gpt4 book ai didi

将原始文本转换为数据列的正则表达式

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

我有一个程序的原始文本输出,我想将其转换为 DataFrame。文本文件未格式化,如下所示。

 10037    149439Special Event       11538.00       13542.59   2004.59
10070 10071Weekday 8234.00 9244.87 1010.87
10216 13463Weekend 145.00 0 -145.00

我可以使用基础包中的 readLines() 将数据读取到 R 中。如何将其转换为看起来像这样的数据(列名称可以是任何名称)。

 A        B         C              D              E          F
10037 149439 Special Event 11538.00 13542.59 2004.59
10070 10071 Weekday 8234.00 9244.87 1010.87
10216 13463 Weekend 145.00 0 -145.00

我应该使用什么正则表达式来实现此目的?我知道这是应用 regexec()regmatches() 组合的理想选择。但我无法想出一个表达式将行分割成所需的组件。

最佳答案

这是一个简单的解决方案:

raw <- readLines("filename.txt")
data.frame(do.call(rbind, strsplit(raw, " {2,}|(?<=\\d)(?=[A-Z])", perl = TRUE)))

# X1 X2 X3 X4 X5 X6
# 1 10037 149439 Special Event 11538.00 13542.59 2004.59
# 2 10070 10071 Weekday 8234.00 9244.87 1010.87
# 3 10216 13463 Weekend 145.00 0 -145.00

正则表达式" {2,}|(?<=\\d)(?=[A-Z])"由两部分组成,结合"|" (逻辑)。

  1. " {2,}"表示至少两个空格。这只会在不同的列之间分割,因为第三列中的文本只有一个空格。
  2. "(?<=\\d)(?=[A-Z])"表示前面是数字、后面是大写字母的位置。这用于在第二列和第三列之间进行分割。

关于将原始文本转换为数据列的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23297380/

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