You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中将文本格式数据转换为表格格式?

在R中将指定文本转换为tibble的实现方法

可以通过文本分割、键值对提取与数据规整的步骤,自动将目标文本转换为指定格式的tibble:

1. 加载必要工具包

依赖tidyverse集合中的字符串处理、数据框操作函数:

library(tidyverse)

2. 完整转换代码

# 原始文本数据
data <- "--------------------------------------------------------
JrId:
1
JournalTitle: AADE editors' journal
MedAbbr: AADE Ed J
ISSN
(Print): 0160-6999
ISSN (Online): 
IsoAbbr: AADE Ed J
NlmId:
7708172
--------------------------------------------------------
JrId:
2
JournalTitle: AANA journal
MedAbbr: AANA J
ISSN (Print):
0094-6354
ISSN (Online): 2162-5239
IsoAbbr: AANA J
NlmId:
0431420
--------------------------------------------------------
JrId:
3
JournalTitle: AARN news letter
MedAbbr: AARN News Lett
ISSN
(Print): 0001-0197
ISSN (Online): 
IsoAbbr: AARN News Lett
NlmId:
1251052
--------------------------------------------------------"

# 步骤1:按分隔线拆分单个期刊的文本块,过滤空内容
journal_blocks <- str_split(data, "--------------------------------------------------------")[[1]] %>%
  str_trim() %>%
  discard(str_length(.) == 0)

# 步骤2:逐个处理期刊块,提取键值对并转为数据行
processed_data <- map_dfr(journal_blocks, function(block) {
  # 修复换行的键名(如"ISSN\n(Print):"合并为"ISSN (Print):")
  cleaned_block <- str_replace_all(block, "(ISSN)\\n\\((Print)\\):", "\\1 (\\2):")
  # 按行拆分并过滤空行
  lines <- str_split(cleaned_block, "\\n")[[1]] %>%
    str_trim() %>%
    discard(str_length(.) == 0)
  
  # 处理键值对:兼容键和值分行的情况(如JrId:后单独一行是数值)
  key_value_pairs <- list()
  current_key <- NULL
  for (line in lines) {
    if (str_detect(line, ":")) {
      split_line <- str_split(line, ":", n = 2)[[1]] %>% str_trim()
      current_key <- split_line[1]
      # 若当前行有值直接存入,否则标记为待补值
      key_value_pairs[[current_key]] <- ifelse(length(split_line) > 1 && str_length(split_line[2]) > 0, split_line[2], NA)
    } else {
      # 当前行是上一个键对应的值
      key_value_pairs[[current_key]] <- line %>% str_trim()
    }
  }
  
  # 转为单行数据框
  as_tibble(key_value_pairs)
})

# 步骤3:调整列名与数据类型,匹配目标格式
final_tibble <- processed_data %>%
  rename(JrID = JrId) %>%
  mutate(
    JrID = as.double(JrID),
    NlmId = as.double(NlmId)
  )

# 查看最终结果
final_tibble

核心逻辑说明

  • 文本拆分:用分隔线将原始文本切割为单个期刊的独立块,避免跨条目干扰。
  • 键值对修复:自动合并换行的键名,同时处理键与值分行的特殊格式,确保每个键对应正确的值。
  • 类型规整:将JrID和NlmId转换为数值型,对齐目标tibble的格式要求。

内容的提问来源于stack exchange,提问作者Reza Khayami

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 20:35:29