使用 mutate(在管道中)替换字符串的一部分

8

我希望替换字符串的一部分(在第一个下划线之间,第一组始终为“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<-` 或其他 stringr 函数来完成这个任务?

它不是已经在做你所描述的吗? - tmfmnk
问题在于(实际上)有几个dplyr/magrittr管道在str_sub之上和之下。我需要将str_sub适配到mutate中或类似操作中。 - r.user.05apr
d %>% mutate(repl_pipe=str_sub(txt,3,6)) - A. Suliman
或者像这样: d %>% mutate(txt = str_replace(txt, '\\d+', repl)) - Humpelstielzchen
4个回答

4

在管道中使用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是最后一个参数,因此必须传递并分配给其名称。

3
d %>% 
  mutate(txt = str_replace(txt, '0000', repl))

可能会用正则表达式,而不是'0000'更好。


2
您可能可以做到以下几点:
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})

2

使用 base R,我们可以使用 substring 函数。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接