如何识别字符串中元素的第N次重复?

问题描述 投票:0回答:3

Packages

library(tidyverse)

My data

str <- tibble(value = c("var_imp_01_prevalence",
                        "var_imp_MeanDecreaseGini_variance_pairwise_distance",
                        "var_imp_06_extinction_rate"))
str
  value                  
  <chr>                  
1 var_imp_01_prevalence  
2 var_imp_MeanDecreaseGini_variance_pairwise_distance
3 var_imp_06_extinction_rate 

What I want as output

  a        b            
  <chr>    <chr>        
1 var_imp_01 prevalence
2 var_imp_MeanDecreaseGini variance_pairwise_distance
3 var_imp_06 extinction_rate

Details

所以,基本上我想使用tidyr :: separate函数找到第三个'_'并分隔我的列。

r regex tidyr stringr
3个回答
1
投票

使用extract,它可以完成,例如这条路。 ^对于不匹配基于最后的_很重要

str %>% extract(value, into = c("a", "b"), regex = "^([^_]*_[^_]*_[^_*]*)_(.*)")

# A tibble: 3 x 2
  a                        b                         
* <chr>                    <chr>                     
1 var_imp_01               prevalence                
2 var_imp_MeanDecreaseGini variance_pairwise_distance
3 var_imp_06               extinction_rate  

1
投票
str%>%mutate(value=sub("((_.*?){3})","\\1SPLIT",value))%>%separate(value,c("a","b"),"_SPLIT")
# A tibble: 3 x 2
                         a                          b
*                    <chr>                      <chr>
1               var_imp_01                 prevalence
2 var_imp_MeanDecreaseGini variance_pairwise_distance
3               var_imp_06            extinction_rate

0
投票

这是regex的工作,尝试使用以下代码:

# For 'a' 
a <- sub("(^.*)_...", "\\1", str[1]) # [1] "var_imp_01valence"

# For 'b'
b <- sub("^.*_(...)", "\\1", str[1]) # [1] "prevalence"

我不是regex的专家,但至少为你的榜样做好工作。

希望这可以提供帮助。

© www.soinside.com 2019 - 2024. All rights reserved.