我有一个由数千行组成的单列数据框,所有行都构建在相同的模式上,例如:

ids <- c("ETC|HMPI01000001|HMPI01000001.1 TAG: Genus Species, T05X3Ml2_CL10007Cordes1_1","ETC|HMPI31000002|HMPI31000002.1 TAG: Genus Species, T3X3Ml2_CL10157Cordes1_1", "ETC|HMPI01000007|HMPI01000007.1 TAG: Genus Species, T1X3Ml2_CL11231Cordes1_1")

df <- as.data.frame(ids)
> df
                                                                            ids
1  ETC|HMPI01000001|HMPI01000001.1 TAG: Genus Species, T05X3Ml2_CL10007Cordes1_1
2  ETC|HMPI31000002|HMPI31000002.1 TAG: Genus Species, T3X3Ml2_CL10157Cordes1_1
3  ETC|HMPI01000007|HMPI01000007.1 TAG: Genus Species, T1X3Ml2_CL11231Cordes1_1

我想将这些字符分成两列:var1和var2,并保留第二个管道之后和第一个空格之前的文本,以及空格之后第二个T之后的文本.这些将是所有线条的通用模式.预期结果为:

> df
            var1                      var2
1 HMPI01000001.1 T05X3Ml2_CL10007Cordes1_1
2 HMPI31000002.1  T3X3Ml2_CL10157Cordes1_1
3 HMPI01000007.1  T1X3Ml2_CL11231Cordes1_1

我已经try 了几个受heretherethere启发的正则表达式.但我想不出来.

我目前有这个,但它没有给出预期的结果:

df2 <- df %>% separate(col = "ids", into = c("var1", "var2"), sep = "\\|([^|]+)$")
> df2
              var1 var2
1 ETC|HMPI01000001     
2 ETC|HMPI31000002     
3 ETC|HMPI01000007   

任何帮助,最好是使用正则表达式和tidyVerse,都将不胜感激.

推荐答案

library(stringr)
library(dplyr)

df |>
  mutate(var1 = str_extract(ids, ".*\\|(\\S+)", group = 1),
         var2 = str_extract(ids, ".*, (.*$)", group = 1))

如果它们的位置固定,也可以使用separate_wider_position:

library(tidyr)

df |>
  separate_wider_position(ids, 
                          widths = c(17, var1 = 14, 21, var2 = max(nchar(ids))), 
                          too_few = "align_start")

#  var1           var2                     
#  <chr>          <chr>                    
# 1 HMPI01000001.1 T05X3Ml2_CL10007Cordes1_1
# 2 HMPI31000002.1 T3X3Ml2_CL10157Cordes1_1 
# 3 HMPI01000007.1 T1X3Ml2_CL11231Cordes1_1 

R相关问答推荐

创建重复删除的唯一数据集组合列表

混淆矩阵,其中每列和等于1

查找满足SpatRaster中条件的单元格位置

x[[1]]中的错误:脚注越界

用derrr在R中查找组间的重复项

将非重复序列高效转换为长格式

在R中使用数据集名称

根据文本字符串中的值粘贴新列

如何在R forestplot中为多条垂直线分配唯一的 colored颜色 ?

如何删除仅在数据集顶部和底部包含零的行

如何将Which()函数用于管道%>;%

从多层嵌套列表构建Tibble?

为什么我对圆周率图的蒙特卡罗估计是空的?

为什么函数toTitleCase不能处理english(1),而toupper可以?

使用ifElse语句在ggploy中设置aes y值

如何在GALT包的函数&geom_x样条线中调整线宽

组合名称具有模式的列表的元素

如何捕获这个shiny 的、可扩展的react 性用户输入矩阵作为另一个react 性对象,以便进一步操作?

图中显示错误 colored颜色 的图例geom_sf

如何根据每个子框架中分类因子的唯一计数来过滤子框架列表?