【发布时间】:2020-08-15 10:49:02
【问题描述】:
我的数据框有一列包含大量文件名,例如:
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)
它返回harry11incongruentnorm.avi,这显然是因为它只是替换了完全匹配的字符串。我发现有一些方法可以告诉gsub 完全替换包含所选字符串的表达式,但我找不到它。
有一个问题In R, how do I replace a string that contains a certain pattern with another string?,但我不确定在这种情况下如何使用agrep。
编辑:附带奖金问题 - 基于@GSee 的回答,是否有任何函数可以让您传递要替换的字符串列表?例如,gsub(c(".*_scott80_.*", ".*_harry11_.*"), "incongruent", d) 将不起作用。
【问题讨论】:
标签: string r expression gsub