J'essaie de faire une substitution de chaîne de données dans R. Je dois trouver tous les mots précédés de '@' (sans espace, par exemple @word) et changer le '@ ' pour '!' (par exemple de @word to! word). En même temps, il laisse intacts les autres instances de '@' (par exemple @ ou @@ ou @ [@]). Par exemple, voici mon dataframe d'origine (pour changer: @def, @jkl, @stu):Substituer mot par le même mot sans initiale @ dans R
> df = data.frame(number = 1:4, text = c('abc @def ghi', '@jkl @ mno', '@[@] pqr @stu', 'vwx @@@ yz'))
> df
number text
1 1 abc @def ghi
2 2 @jkl @ mno
3 3 @[@] pqr @stu
4 4 vwx @@@ yz
Et ce que je besoin pour ressembler à:
> df_result = data.frame(number = 1:4, text = c('abc !def ghi', '!jkl @ mno', '@[@] pqr !stu', 'vwx @@@ yz'))
> df_result
number text
1 1 abc !def ghi
2 2 !jkl @ mno
3 3 @[@] pqr !stu
4 4 vwx @@@ yz
J'ai essayé avec
> gsub('@.+[a-z] ', '!', df$text)
[1] "abc !ghi" "[email protected] mno" "[email protected]" "vwx @@@ yz"
Mais le résultat n'est pas le résultat souhaité. Toute aide est très appréciée.
Merci.
Salut Rich Scriven, merci beaucoup pour la solution et une explication très détaillée de la logique qui la sous-tend. Cela fonctionne parfaitement. Passez une bonne journée. – user3550647