У меня есть два кадра данных с колонкой с названием «Заголовок» в каждой, содержащей строку. Мне нужно уменьшить эти строки, чтобы объединить их. Теперь я хочу сделать это как можно чище в цикле, так что мне нужно только один раз написать gsub-функцию.gsub() на нескольких кадрах данных в loop/lapply
Скажем, у меня есть:
df_1 <-read.table(text="
id Title
1 some_average_title
2 another:_one
3 the_third!
4 and_'the'_last
",header=TRUE,sep="")
и:
df_2 <-read.table(text="
id Title
1 some_average.title
2 another:one
3 the_third
4 and_the_last
",header=TRUE,sep="")
Я бы сейчас работать:
df_1$Title <- gsub(" |\\.|'|:|!|\\'|_", "", df_1$Title)
df_2$Title <- gsub(" |\\.|'|:|!|\\'|_", "", df_2$Title)
Я попробовал следующий цикл:
for (dtfrm in c("dt_1", "df_2")) {
assign(paste0(dtfrm, "$Title"),
gsub(" |\\.|'|:|!|\\'|", "", get(paste0(dtfrm, "$Title")))
)
}
, но он не работает - несмотря на отсутствие сообщений об ошибках.
Я также думал о lapply(list(dt_1, dt_2), function(w){ w$Title <- XXX })
, но я не знаю, что поставить для XXX, потому что gsub()
нуждается в третьем аргументе в списке строк.
'lapply (list (df_1, df_2), function (w) gsub (" | \\. | '|: |! | \\' | _ "," ", w $ Title))'? Или более общий 'lapply (mget (ls (pattern =" df _ \\ d ")), функция (w) gsub (" | \\. | '|: |! | \\' | _ "," ", w $ Title)) ' –
Регулярное выражение' [. ':! _] 'Немного легче читать. –
Это 'assign (paste0 (dtfrm," $ Title ")' не будет работать, потому что вы надеетесь, что 'assign' интерпретирует результат символа как объект языка, и он не настроен для этого. –