我有一列想要分开:
df <- tibble(
variable = c("var_a_min", "var_ab_max", "var_abc_mean", "var_abcd_sd"),
value = c(1,2,3,4)
)
数据如下:
# A tibble: 4 x 2
variable value
<chr> <dbl>
1 var_a_min 1
2 var_ab_max 2
3 var_abc_mean 3
4 var_abcd_sd 4
我想分隔variable
列,以使最后一个下划线之后的内容成为第二列。
df %>% separate(variable, c("variable", "metric"), sep = [after last _])
我尝试了一些正则表达式,但无法弄清楚。数据应如下所示:
# A tibble: 4 x 3
variable metric value
<chr> <chr> <dbl>
1 var_a min 1
2 var_ab max 2
3 var_abc mean 3
4 var_abcd sd 4
答案 0 :(得分:4)
可以选择extract
来将字符捕获为一个组。在第一个捕获组中,它是一个贪婪匹配((.*)
-零个或多个字符),后跟一个_
,在第二个组(([^_]+)$
)中,匹配不匹配的字符_
直到字符串($
)的末尾。这样,可以确保第一个贪婪匹配回溯
library(tidyverse)
df %>%
extract(variable, into = c("variable", "metric"), "(.*)_([^_]+$)")
separate
也可以使用正则表达式,因此如果前缀子字符串为'var',则可以使用
df %>%
separate(variable, into = c("variable", "metric"), "(?<!var)_")
# A tibble: 4 x 3
# variable metric value
# <chr> <chr> <dbl>
#1 var_a min 1
#2 var_ab max 2
#3 var_abc mean 3
#4 var_abcd sd 4