gpt4 book ai didi

读取 .txt 文件,其中列用引号分隔,行在 R 中多行

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

我在将 .txt 文件读取到 R 时遇到问题。它最后应该包含一个 id 列和一个 text 列。文件结构如下:

"", "textOriginal"
"1," "some text"
"2," "some text"
"3," "some text"

还有很多条目的文本被分成几行,如下所示:

"4," "some
more
text"

但是,我想避免 R 从第四个文本中生成三行,所以基本上我希望引号内的所有内容都位于具有各自 id 的一行中。我尝试了 read.table(mytext.txt), header = TRUE) 但没有得到所需的结果...

最佳答案

尝试这个技巧,从文本文件开始:

"", "textOriginal"
"1," "some text"
"2," "some text"
"3," "some text"
"4," "some
more
text"

代码:

quux <- readLines("quux.txt")
quux2 <- stringr::str_extract_all(paste(paste0(quux, ifelse(cumsum(nchar(gsub('[^"]', '', quux))) %% 2 == 0, ",", "\n")), collapse = ""), '"[^"]*"')[[1]]
quux2
# [1] "\"\"" "\"textOriginal\"" "\"1,\""
# [4] "\"some text\"" "\"2,\"" "\"some text\""
# [7] "\"3,\"" "\"some text\"" "\"4,\""
# [10] "\"some\n more\n text\""

data.frame(matrix(quux2, ncol = 2, byrow = TRUE))
# X1 X2
# 1 "" "textOriginal"
# 2 "1," "some text"
# 3 "2," "some text"
# 4 "3," "some text"
# 5 "4," "some\n more\n text"

总体目标是:

  1. 以文本形式阅读此内容;
  2. 在引用完整的句子中添加逗号,并在不完整的行中添加换行符 (\n);
  3. 将所有这些连接成一个连续向量;
  4. 提取文字 " 的所有序列,零个或多个非 ",然后是另一个 "
  5. 使用矩阵构造来构造data.frame。 (根据需要重命名。)

演练:

  • cumsum(nchar(..)) 计算一行中引号的数量。我们将其累积起来(例如,more 行被视为仍不完整。
  • ifelse(..) 根据 cumsum 是奇数(不完整引号)还是偶数(引号完整),附加换行符或逗号;
  • paste0(追加)到原始行;
  • 粘贴(连接)所有内容到一个字符串中;
  • 然后提取包含双引号的所有长度的字符串,一些(或没有)非引号,然后是另一个双引号。

如果需要,您可以使用以下方法清理它:

# quux3 <- ...above...
quux3[] <- lapply(quux3, gsub, pattern = '^"|\"$', replacement = '')
quux3
# X1 X2
# 1 textOriginal
# 2 1, some text
# 3 2, some text
# 4 3, some text
# 5 4, some\n more\n text

关于读取 .txt 文件,其中列用引号分隔,行在 R 中多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72937924/

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