Отдельный столбец с тидиром по последнему вхождению строки - PullRequest
1 голос
/ 25 июня 2019

У меня есть столбец, который я хотел бы разделить:

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

1 Ответ

4 голосов
/ 25 июня 2019

Опция 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
...