如何将指定文本格式的民族分类数据转换为DataFrame?
将文本转换为DataFrame的R实现
可以通过文本处理和正则提取的方式,把给定的文本转换成目标格式的DataFrame,以下是具体实现:
方法一:Base R 实现
text <- " VALUE Ethnic 1 = 'White - British' 2 = 'White - Irish' 9 = 'White - Other' ; " # 拆分文本为单行并过滤无效内容 lines <- strsplit(text, "\n")[[1]] valid_lines <- lines[lines != "" & !grepl("VALUE|;", lines)] # 提取数字编码和民族名称 code <- as.integer(sub("^(\\d+) = .*", "\\1", valid_lines)) ethnic_group <- sub(".*'([^']+)'.*", "\\1", valid_lines) # 构建DataFrame result_df <- data.frame(Code = code, Ethnic = ethnic_group) print(result_df)
运行后输出:
Code Ethnic 1 1 White - British 2 2 White - Irish 3 9 White - Other
方法二:Tidyverse 简洁实现
如果习惯使用tidyverse工具链,可以用更流畅的管道操作完成:
library(tidyverse) text <- " VALUE Ethnic 1 = 'White - British' 2 = 'White - Irish' 9 = 'White - Other' ; " result_df <- text %>% str_split("\n") %>% pluck(1) %>% # 过滤空行、标题行和结尾分号行 discard(~ .x == "" | str_detect(.x, "VALUE|;")) %>% # 提取数字和引号内的字符串 str_extract_all("(\\d+)|'([^']+)'", simplify = TRUE) %>% as_tibble(.name_repair = ~ c("Code", "Ethnic")) %>% # 转换数据类型并清理引号 mutate(Code = as.integer(Code), Ethnic = str_remove_all(Ethnic, "'")) print(result_df)
核心逻辑说明
- 文本拆分与过滤:先把长文本拆分成单行,剔除空行、标题行(
VALUE Ethnic)和结尾的分号行,只保留有效数据行。 - 正则提取:通过正则表达式分别提取每行的数字编码,以及单引号包裹的民族名称字符串。
- 数据框构建:将提取的两列数据组合成DataFrame,完成类型转换。
内容的提问来源于stack exchange,提问作者jackahall
相关产品推荐
相关产品推荐

