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
a b
<chr> <chr>
1 var_imp_01 prevalence
2 var_imp_MeanDecreaseGini variance_pairwise_distance
3 var_imp_06 extinction_rate
所以,基本上我想使用tidyr :: separate函数找到第三个'_'并分隔我的列。
使用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
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
这是regex
的工作,尝试使用以下代码:
# For 'a'
a <- sub("(^.*)_...", "\\1", str[1]) # [1] "var_imp_01valence"
# For 'b'
b <- sub("^.*_(...)", "\\1", str[1]) # [1] "prevalence"
我不是regex
的专家,但至少为你的榜样做好工作。
希望这可以提供帮助。