在应用于另一列的一列数据框上使用gsub

时间:2015-10-08 19:03:31

标签: r

如果我有一个简单的数据,那么:

    Position    Change
    76          A->B
    43          C->D

如何创建组合列,在更改之间插入位置,删除箭头(' - >')。例如

    Position  Change  Combined
    76        A->B     'A76B'
    43        C>D      'C43D'

我尝试使用像这样的gsub:

df$Combined<-gsub("->",df$Position, df$Change) 

但只插入零,而不是位置。

3 个答案:

答案 0 :(得分:3)

gsub()未在replacement上进行矢量化,但 stringi 包中有一个函数,它非常有效。我们可以使用stri_replace_all_fixed(),因为我们有一个我们想要替换的固定字符串。使用固定字符串可以提高操作效率。

with(df, stringi::stri_replace_all_fixed(Change, "->", Position))
# [1] "A76B" "C43D"

stringr 包中也有类似的功能。在这里,我们可以用fixed()包装要替换的字符串,以表示我们正在寻找一个固定的字符串。这个软件包包装了 stringi (从某种意义上说),效率也非常高。

with(df, str_replace_all(Change, fixed("->"), Position))
# [1] "A76B" "C43D"

答案 1 :(得分:3)

就像Richard Scriven所说的那样,gsub不会在replacementx上进行矢量化,但在基础R中你可以创建一个矢量化版本:

gsub_v <- Vectorize(gsub, c("replacement", "x"))
gsub_v("->", df$Position, df$Change)

答案 2 :(得分:-3)

df$com<-with(df,gsub('->',Position,Change))
Position Change  com
1       76   A->B A76B
2       43   C->D C76D