我的数据框有一列包含大量文件名,例如:
d <- c("harry11_scott80_norm.avi","harry11_norm.avi","harry11_scott80_lpf.avi",
"joel51_lpf.avi","rich82_joel51_lpf.avi")
我希望 R 用两个人的名字替换所有的表达式,比如harry11_scott80_norm.avi
用这个表达式incongruent
,而所有的用一个人的名字,比如harry11_norm.avi
用congruent
。我可以gsub
这样做:
dd <- gsub("harry11_scott80_norm.avi", "incongruent", d)
但我得到了很多这样的名字,所以这将是一个非常笨拙的解决方案。所以理想情况下,我想_scott80_
用“不一致”替换包含字符串的整个表达式。我认为gsub
可以做到这一点,但是当我运行它时:
dd <- gsub("_scott80_", "incongruent", d)
它返回 with harry11incongruentnorm.avi
,这显然是因为它只是替换了精确的字符串匹配。我发现有一些方法可以告诉gsub
完全替换包含选定字符串的表达式,但我找不到它。
有一个问题在 R 中,如何用另一个字符串替换包含特定模式的字符串?,但我不确定如何 agrep
在这种情况下使用。
编辑:附带奖金问题-基于@GSee的回答,是否有任何功能可以让您传递要替换的字符串列表?例如,gsub(c(".*_scott80_.*", ".*_harry11_.*"), "incongruent", d)
不会工作。