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

时间:2018-03-02 16:16:41

标签: r regex tidyr stringr

\Debugbar::info($variable);

我的数据

library(tidyverse)

我想要的输出

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 

详细

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

3 个答案:

答案 0 :(得分: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 :(得分: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

答案 2 :(得分:0)

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

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

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

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

希望这可以提供帮助。