У меня есть фрейм данных, в котором есть столбец с большим количеством имен файлов, например:
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
полностью заменить выражение, содержащее выбранную строку, но я не могу его найти.
Был вопрос Как в R заменить строку, содержащую определенный шаблон, другой строкой?, но я не уверен, как использовать agrep
в этом контексте.
РЕДАКТИРОВАТЬ: Побочный бонусный вопрос - на основе ответа @GSee, есть ли какая-либо функция, которая позволяет вам передать список строк, которые вы хотите заменить? Например, gsub(c(".*_scott80_.*", ".*_harry11_.*"), "incongruent", d)
не подойдет.