如果我有一个简单的数据,那么:
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)
但只插入零,而不是位置。
答案 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
不会在replacement
或x
上进行矢量化,但在基础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