打开包含 table 且没有明确分隔符的文本文件

Open a text file containing a table with no clear separator

我必须打开一个文本文件,其中包含我想作为 tibble 或数据框打开的数据。数据存储在一个表中,以白色 space 作为分隔符(我想)。问题是 whitespace 也用于“PI”列。我不知道如何在不执行任何复杂的脚本来扫描所有内容并使用正则表达式解析它的情况下打开它。 你有什么建议吗 ?我认为当我们将它作为文本文件打开时,它的设计目的是让列在视觉上对齐。

这是该文件的示例。

  DAC                                                                PI    SPROF_DATE_UPDATE DATA_MODE      WMO CYCLE         PROFILE_DATE      LON     LAT        MPD_RAW      MPD_ADJ        Z_RAW       Z_ADJ
 aoml  STEPHEN RISER , KENNETH JOHNSON                                   2021-05-12 18:52:52         R  5903612   038  2012-07-04 01:15:50    8.651 -41.466     -89.313473          NaN     5.439052         NaN
 aoml  STEPHEN RISER , KENNETH JOHNSON                                   2020-12-03 02:03:33         R  5903717   138  2014-02-03 18:07:45 -164.533 -69.958     134.866767          NaN     7.884637         NaN
 aoml  STEPHEN RISER , KENNETH JOHNSON                                   2021-05-12 22:44:39         R  5903717   139  2014-02-10 20:05:49 -164.302 -70.061      99.848464          NaN     5.803396         NaN
 aoml  STEPHEN RISER , KENNETH JOHNSON                                   2021-05-12 22:44:53         R  5903717   140  2014-02-17 22:06:53 -164.146 -70.246     107.535752          NaN     6.260275         NaN
  1. 以文本行的形式读取文件
  2. 用自定义且唯一的分隔符替换多个连续空格
  3. 将所有内容粘贴到字符向量中
  4. 使用自定义分隔符读取该数据
  5. 额外的re-formatting,例如修剪和类型转换
library(tidyverse)
read_lines("data.txt") %>%
  map_chr(~ .x %>% str_replace_all("(  )+", ";")) %>%
  paste0(collapse = "\n") %>%
  read_delim(delim = ";", col_types = cols(.default = "character")) %>%
  mutate(across(everything(), str_trim)) %>%
  type_convert()

修复@danlooo
第一:header 分隔符是单个 space.
第二:有时在 - 之前只有一个 space

data = readLines("testdata.txt") 
data[1] = gsub(pattern ="\s+" ,replacement = "\t" ,x = data[1])
modified_data = gsub(pattern ="\s-" ,replacement = "  -" ,x = data)
modified_data = gsub(pattern ="\s{2,}" ,replacement = "\t" ,x = modified_data)
final_data = paste0(modified_data,collapse = "\n")
write(final_data, "finaldata.txt")
finaldatatable <- read_delim("finaldata.txt", 
                        delim = "\t", escape_double = FALSE, 
                        trim_ws = TRUE)