Заменить (gsub) все строки в столбце из значений в другом столбце? - PullRequest
0 голосов
/ 22 февраля 2019

Предположим, у меня есть фрейм данных как таковой,

   df = data.frame ( a = c(1,14,15,11) , b= c("xxxchrxxx","xxxchryy","zzchrzz","aachraa") )
       a   b
    1  1 xxxchrxxx
    2 14 xxxchryy
    3 15 zzchrzz
    4 11 aachraa

. Я хочу заменить chr из столбца b на chrx, x получить из столбца a

   a   b
1  1 xxxchr1xxx
2 14 xxxchr14yy
3 15 zzchr15zz
4 11 aachr11aa

, однако я не могузаставить gsub работать, так как он ожидает один элемент

df$b = gsub ( "chr",paste0("chr",df$a), df$b)

любой способ сделать это?

Ответы [ 3 ]

0 голосов
/ 22 февраля 2019

РЕДАКТИРОВАТЬ :: С stringr:

stringr::str_replace_all(df$b,"chr",paste0("chr",df$a))

Продолжая с paste0:

df$b<-paste0(df$b,df$a)
   a     b
1  1  chr1
2 14 chr14
3 15 chr15
4 11 chr11
0 голосов
/ 22 февраля 2019

Причина в том, что gsub replacement принимает только вектор длиной 1. В соответствии с заменой ?gsub

- если задан вектор символов длиной 2 или более,первый элемент используется с предупреждением.

Если необходимо выполнить векторизованную замену, используйте str_replace

library(stringr)
str_replace(df$b, "chr", paste0("chr", df$a))
#[1] "xxxchr1xxx" "xxxchr14yy" "zzchr15zz"  "aachr11aa" 

На основании примера это толькопростой paste

df$b <- with(df, paste0(b, a))
0 голосов
/ 22 февраля 2019
df = data.frame ( a = c(1,14,15,11) , b= c("chr","chr","chr","chr") )
df$b <- paste0(df$b, df$a)
df
#>    a     b
#> 1  1  chr1
#> 2 14 chr14
#> 3 15 chr15
#> 4 11 chr11

Создано в 2019-02-22 пакетом представ (v0.2.1)

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