R Извлечь специфику c текст из переменной - PullRequest
1 голос
/ 17 марта 2020

У меня есть датафрейм с этим столбцом:

VAR1
var_1.1
var_1.2
var_1.3
var_2.1
var_2.2
var_2.3

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

VAR1    VAR2
var_1.1  1
var_1.2  1
var_1.3  1
var_2.1  2
var_2.2  2
var_2.3  2

В основном текст сохраняется между "_" и "."

Thx!

Ответы [ 2 ]

3 голосов
/ 17 марта 2020

Мы можем использовать str_extract для сопоставления одной или нескольких цифр (\\d+) после _, за которым следует .

df1 %>%
     mutate(VAR2 = str_extract(VAR1, "(?<=_)\\d+(?=\\.)"))
#     VAR1 VAR2
#1 var_1.1    1
#2 var_1.2    1
#3 var_1.3    1
#4 var_2.1    2
#5 var_2.2    2
#6 var_2.3    2

или с str_replace для захвата цифр как группу и в замене указать обратную ссылку захваченной группы

df1 %>% 
       mutate(VAR2 = str_replace(VAR1, ".*_(\\d+)\\..*", "\\1"))

или с sub из base R

sub(".*_(\\d+)\\..*", "\\1", df1$VAR1)

data

df1 <- structure(list(VAR1 = c("var_1.1", "var_1.2", "var_1.3", "var_2.1", 
"var_2.2", "var_2.3")), class = "data.frame", row.names = c(NA, 
-6L))
1 голос
/ 17 марта 2020

Мы можем использовать подход без регулярных выражений, если у вас есть те же данные, как показано с помощью parse_number

readr::parse_number(df$VAR1)
#[1] 1.1 1.2 1.3 2.1 2.2 2.3

Теперь, так как вам нужно число перед точкой (.), мы можем floor число, которое мы получили сверху.

df$Var2 <- floor(readr::parse_number(df$VAR1))
df

#     VAR1 Var2
#1 var_1.1    1
#2 var_1.2    1
#3 var_1.3    1
#4 var_2.1    2
#5 var_2.2    2
#6 var_2.3    2
...