如何高效将制表符分隔字符串列表转为指定行/列的DataFrame?
解决方案
可以用两种高效方法实现需求,直接看代码和说明:
基础R实现
先写个解析函数处理单个列表,再批量合并:
# 定义解析函数:把带制表符的字符串列表转成单行数据框 parse_list <- function(lst) { # 按制表符分割每个字符串 split_str <- strsplit(lst, "\t") # 提取列名(去掉末尾的冒号)和数值(转成整数) cols <- gsub(":$", "", sapply(split_str, `[`, 1)) vals <- as.integer(sapply(split_str, `[`, 2)) # 转成单行数据框 as.data.frame(t(vals), col.names = cols) } # 把xx、yy放进命名列表,批量处理后合并成最终数据框 result <- do.call(rbind, lapply(list(xx = xx, yy = yy), parse_list))
运行后result就是目标格式:行名是xx/yy,列名是raw total sequences/1st fragments,对应数值已转成整数类型。
tidyverse简洁实现
如果常用tidyverse工具,用purrr+dplyr可以一步到位:
library(tidyverse) result <- list(xx = xx, yy = yy) %>% map_dfr(function(lst) { lst %>% str_split("\t", simplify = TRUE) %>% as_tibble() %>% mutate( V1 = str_remove(V1, ":$"), # 去掉列名末尾的冒号 V2 = as.integer(V2) # 数值转成整数 ) %>% pivot_wider(names_from = V1, values_from = V2) }, .id = "row_name") %>% # 保留原列表名称作为行名来源 column_to_rownames("row_name") # 把列转成行名
内容的提问来源于stack exchange,提问作者Nmgh
相关产品推荐
相关产品推荐

