R语言如何将字符串按单字符拆分存入dataframe的独立新列
方案1:使用tidyr::separate(最简洁,适合tidyverse工作流)
直接对sequence列按字符位置拆分,不需要提前拆分出列表:
library(tidyr) # 按每1个字符的位置拆分,生成pos1到pos8共8列 df_new <- df %>% separate(sequence, into = paste0("pos", 1:8), sep = 1:7, remove = FALSE)
参数说明:
sep = 1:7表示在第1、2...7个字符后拆分,刚好把8位字符串拆成8个单字符列remove = FALSE保留原始sequence列,不需要的话可以设为TRUE
方案2:基于你已有的list1快速转换
如果已经生成了拆分后的列表,直接转矩阵后绑定到原数据框即可,不需要逐列赋值:
# 把列表转成3行8列的矩阵,设置列名 pos_mat <- do.call(rbind, list1) colnames(pos_mat) <- paste0("pos", 1:8) # 绑定到原数据框 df_new <- cbind(df, pos_mat)
该方法运算效率极高,即使是十万行以上的数据集也能快速处理。
方案3:纯Base R实现,无需加载第三方包
# 用base::strsplit拆分字符串 split_list <- strsplit(df$sequence, "") pos_mat <- do.call(rbind, split_list) colnames(pos_mat) <- paste0("pos", 1:8) df_new <- cbind(df, pos_mat)
内容的提问来源于stack exchange,提问作者nouse
相关产品推荐
相关产品推荐

