将单篇文献研究领域列表转换为同前缀对应同行的DataFrame
解决R列表转DataFrame的问题
实现思路
- 将嵌套列表转换为普通DataFrame,简化后续处理流程
- 从
name字段中提取开头的数字编码,区分两位编码(对应division列)和四位编码(对应group列) - 以编码的前两位为匹配依据,将两类数据合并到同一行,并保留原始条目顺序
代码实现
首先定义原始列表:
my_list <- list( list(id = "80067", name = "3403 Macromolecular and Materials Chemistry"), list(id = "80011", name = "40 Engineering"), list(id = "80005", name = "34 Chemical Sciences") )
执行以下处理步骤:
# 1. 转换嵌套列表为DataFrame,并记录原始顺序 df <- do.call(rbind.data.frame, my_list) df$original_order <- seq(nrow(df)) # 2. 提取名称开头的数字编码,并判断编码长度 df$code_prefix <- substr(df$name, 1, regexpr(" ", df$name) - 1) df$code_length <- nchar(df$code_prefix) # 3. 拆分出division(两位编码)和group(四位编码)数据 division_df <- df[df$code_length == 2, c("name", "code_prefix", "original_order")] colnames(division_df) <- c("division", "division_code", "original_order") group_df <- df[df$code_length == 4, c("name", "code_prefix")] group_df$division_code <- substr(group_df$code_prefix, 1, 2) colnames(group_df) <- c("group", "group_code", "division_code") # 4. 合并数据并恢复原始顺序 result <- merge(division_df, group_df[, c("group", "division_code")], by = "division_code", all.x = TRUE) result <- result[order(result$original_order), c("division", "group")]
最终结果
运行代码后得到的result与期望输出完全一致:
> result division group 2 40 Engineering <NA> 1 34 Chemical Sciences 3403 Macromolecular and Materials Chemistry
内容的提问来源于stack exchange,提问作者pgitti
相关产品推荐
相关产品推荐

