Mam dwie ramki danych z kolumną o nazwie "Tytuł" w każdym, zawierające ciąg. Muszę zmniejszyć te struny, aby je połączyć. Teraz chcę uczynić to tak czystym, jak to możliwe w pętli tak, że będę musiał tylko raz napisać funkcję gsub.gsub() na wielu ramkach danych w pętli/lapply
Powiedzmy mam:
df_1 <-read.table(text="
id Title
1 some_average_title
2 another:_one
3 the_third!
4 and_'the'_last
",header=TRUE,sep="")
oraz:
df_2 <-read.table(text="
id Title
1 some_average.title
2 another:one
3 the_third
4 and_the_last
",header=TRUE,sep="")
Chciałbym teraz uruchomić:
df_1$Title <- gsub(" |\\.|'|:|!|\\'|_", "", df_1$Title)
df_2$Title <- gsub(" |\\.|'|:|!|\\'|_", "", df_2$Title)
Próbowałem następującą pętlę:
for (dtfrm in c("dt_1", "df_2")) {
assign(paste0(dtfrm, "$Title"),
gsub(" |\\.|'|:|!|\\'|", "", get(paste0(dtfrm, "$Title")))
)
}
ale to nie działa - pomimo braku komunikatów o błędach.
Myślałem również o lapply(list(dt_1, dt_2), function(w){ w$Title <- XXX })
, ale nie wiem, co umieścić w XXX, ponieważ gsub()
potrzebuje jako trzeci argument listę ciągów.
'lapply (lista (df_1, df_2), funkcja (w) gsub (" | \\. | '|: |! | \\' | _ "," ", w $ Tytuł))'? Lub bardziej ogólny "lapply (mget (ls (pattern =" df _ \\ d ")), function (w) gsub (" | \\. | '|: |! | \\' | _ "," ", w $ Title)) ' –
Wyrażenie regularne' [. ':! _] 'Jest nieco łatwiejsze do odczytania. –
To 'assign (paste0 (dtfrm," $ Title ")' nie zadziała, ponieważ masz nadzieję, że 'assign' zinterpretuje wynik znaku jako obiekt języka i nie jest skonfigurowany do tego. –