Przeskakując z poprzedniego pytania, mam problem z prawidłową składnią wyrażeń reg, aby wyizolować określone słowo.Wyodrębnianie określonego słowa za pomocą gsub i regex
względu ramka danych:
DL<-c("Dark_ark","Light-Lis","dark7","DK_dark","The_light","Lights","Lig_dark","D_Light")
Col1<-c(1,12,3,6,4,8,2,8)
DF<-data.frame(Col1)
row.names(DF)<-DL
Szuka ekstrakt wszystkich „ciemne” i „światło” (pomijając górnej vs małymi literami) od nazw wierszy i złożyć drugą kolumnę zawierającą tylko ciąg „ciemny” lub „lekki”
Col2<-c("Dark","Light","dark","dark","light","Light","dark","Light")
DF$Col2<-Col2
Col1 Col2
Dark_ark 1 Dark
Light-Lis 12 Light
dark7 3 dark
DK_dark 6 dark
The_light 4 light
Lights 8 Light
Lig_dark 2 dark
D_Light 8 Light
Ive zmienił oryginalne dane trochę o szczegóły mój aktualny problem, ale działa z doskonałą odpowiedź od Tyler Rinker, użyłem tego:
DF$Col2<-gsub("[^dark|light]", "", row.names(DF), ignore.case = TRUE)
Ale gsub zostaje potknięty na niektórych wspólnych literach. Przeszukując fora izolowania dokładne słowa z regex, wygląda na to, że odpowiedź powinna być użycie podwójny ukośnik albo z
\\<light\\>
lub
\\blight\\b
Więc dlaczego linia
DF$Col2<-gsub("[^\\<dark\\>|\\<light\\>]", "", row.names(DF), ignore.case = TRUE)
Nie pociągnij żądanej kolumny powyżej? Zamiast tego otrzymuję
Col1 Col2
Dark_ark 1 Darkark
Light-Lis 12 LightLi
dark7 3 dark
DK_dark 6 DKdark
The_light 4 Thlight
Lights 8 Light
Lig_dark 2 Ligdark
D_Light 8 DLight
Nikt nie odpowie na pytanie regex jeśli to nie jest [ssce] (http://sscce.org) – aaronman
Po pierwsze, '\\ b' służy do definiowania granic słów. Więc będziesz musiał powiedzieć, jaki jest dokładny ciąg pomiędzy. Nie możesz tego negować afaiu. Po drugie, używa spacji i znaków interpunkcyjnych do wyszukiwania granic ... a "_" nie jest jednym z nich. – Arun