我有data.frame有两列,如下所示

dat

    ID                             Details
    id_1        box1_homodomain gn=box1 os=homo sapiens p=4 se=1
    id_2        sox2_plurinet gn=plu os=mus musculus p=5 se=3

我想在“详细信息”列中为所有ID拆分“os = xxx”和gn =“yyy”,并按如下所示进行打印:
    Id   Description        gn      os
   Îd_1  box1_homodomain    box1    homo sapiens
   Id_2  sox2_plurinet      plu     mouse musculus

我尝试在R中使用gsub方法,但无法将os = homo sapiens和gn = box1拆分为各自的列。我使用的以下R代码
dat$gn=gsub('^[gn=][A-z][A-z]`,dat$Details)
dat$os=gsub('^[os=][A-z][A-z]`,dat$Details)

谁能告诉我什么地方出了问题以及如何纠正。请帮助我。

提前致谢

最佳答案

这是tidyr的一个选项:

library(tidyr)
# specify the new column names:
vars <- c("Description", "gn", "os")
# then separate the "Details" column according to regex and drop extra columns:
separate(dat, Details, into = vars, sep = "[A-Za-z]+=", extra = "drop")
#    ID      Description    gn            os
#1 id_1 box1_homodomain  box1  homo sapiens
#2 id_2   sox2_plurinet   plu  mus musculus

10-08 07:58