如何在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
相关产品推荐
相关产品推荐

