Заменить часть строки на mutate (в трубе) - PullRequest
4 голосов
/ 26 сентября 2019

Я хотел бы заменить часть строки (между первыми 2 символами подчеркивания, первая группа всегда будет "i"), как в примере с базовым R ниже:

library(dplyr)
library(stringr)

d <- tibble(txt = c("i_0000_GES", "i_0000_OISO", "i_0000_ASE1333"),
            repl = c("1111", "1111", "2222"))

str_sub(d$txt, 3, 6) <- d$repl
d

# A tibble: 3 x 2
# txt            repl 
# <chr>          <chr>
# 1 i_1111_GES     1111 
# 2 i_1111_OISO    1111 
# 3 i_2222_ASE1333 2222  

Как я могу это сделатьчто либо с помощью str_sub<-, либо с помощью другой строковой функции?

Ответы [ 4 ]

2 голосов
/ 26 сентября 2019

Вы, вероятно, можете сделать:

d %>%
 mutate(txt = str_replace(txt, str_sub(txt, 3, 6), repl))

  txt            repl 
  <chr>          <chr>
1 i_1111_GES     1111 
2 i_1111_OISO    1111 
3 i_2222_ASE1333 2222

Здесь вы сначала подстрока, а затем заменить эту подстроку на repl.

Или:

d %>%
 mutate(txt = {str_sub(txt, 3, 6) <- repl; txt})
1 голос
/ 26 сентября 2019

С base R мы можем использовать substring

substring(d$txt, 3, 6) <- d$repl
1 голос
/ 26 сентября 2019

Вот один из способов использования str_sub<- в канале.

d %>%
  mutate(txt = `str_sub<-`(txt, 3, 6, value = repl))
## A tibble: 3 x 2
#  txt            repl 
#  <chr>          <chr>
#1 i_1111_GES     1111 
#2 i_1111_OISO    1111 
#3 i_2222_ASE1333 2222 

Обратите внимание, что аргумент value является последним, поэтому его необходимо передать присвоенному его имени.

1 голос
/ 26 сентября 2019
d %>% 
  mutate(txt = str_replace(txt, '0000', repl))

Хотя, вероятно, будет лучше с регулярным выражением вместо '0000'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...