R 패키지 "countrycode"에는 "country.name.en.regex"라는 변수가 포함 된 데이터 프레임 (countrycode_data)이 포함되어 있습니다. 이 변수에는 국가 이름 또는 그 변형이 특정 열에서 발생하는지에 따라 TRUE 또는 FALSE 인 새 열을 만드는 데 사용하려는 정규식 패턴이 들어 있습니다 (아래 예 참조). 패키지 국가 코드 및 정규식
AB <- c('CHINAS PARTY CONGRESS','JAPAN-US RELATIONS','JAPAN TRIES TO')
TI <- c('AMERICAN FOREIGN POLICY', 'CHINESE ATTEMPTS TO', 'BRITAIN HAS TEA')
AU <- c('AUTHOR 1', 'AUTHOR 2','AUTHOR 3')
M <- data.frame(AB,TI,AU)
M$Japan<- !!rowSums(sapply(M[c(1:3)], grepl, pattern ='JAPAN'))
일본 정규 표현식은 물론 매우 간단
그러나 더 복잡한 경우가 있습니다. 지금 제공하는 모든 정규 표현식을 테스트 작동하지 않는 사람들은 를 포함하는 경향이 실현Error in FUN(X[[i]], ...) :
invalid regular expression '^(?=.*REP).*CZECH|CZECHIA|BOHEMIA', reason 'Invalid regexp'
>
: 예를 들어,이 경우
> M$Czech_Republic<- !!rowSums(sapply(M[c(3, 7:9)], grepl, pattern ="^(?=.*REP).*CZECH|CZECHIA|BOHEMIA"))
, 나는 다음과 같은 오류를받을 수 있나요
^(? =. * 또는^(?!
예를 들어 단어 경계가 두 개의 백래시 (예 : \ B가 아니라 \ B 대신 \ B)로 이스케이프되지 않는 것으로 나타났습니다.내가 모르는 해결책? 아니면 다른 대안으로 접근할까요? 다음은 오류를 반환하는 정규 표현식의 몇 가지 예입니다.
M$China<- !!rowSums(sapply(M[c(3, 7:9)], grepl, pattern ="^(?!.*\\BMAC)(?!.*\\BHONG)(?!.*\\BTAI)(?!.*\\BREP).*CHINA|^(?=.*PEO)(?=.*REP).*CHINA"))
M$United_States_of_America<- !!rowSums(sapply(M[c(3, 7:9)], grepl, pattern ="UNITED.?STATES\\B(?!.*ISLANDS)|\\BU\.?S\.?A\.?\\B|^\S*U\.?S\.?\\B(?!.*ISLANDS)"))
M$Republic_of_Korea<- !!rowSums(sapply(M[c(3, 7:9)], grepl, pattern ="^(?!.*D.*P.*R)(?!.*DEMOCRAT)(?!.*PEOPLE)(?!.*NORTH).*\\BKOREA(?!.*D.*P.*R)"))
고마워요! SCW
lookahead 패턴을 작동 시키려면'perl = TRUE'를 추가하십시오. 또한 체코 어 정규 표현식은 "^ (? =. * REP). * (?: CZECH (? : IA)? BOHEMIA)"처럼 보이길 원합니다. " –
고마워, Wiktor. Perl은 나에게 발생하지 않았지만 트릭을 수행 한 것 같습니다. 왜 체코 어 정규 표현식을 바꾸어야 했습니까? – SCW
그냥 습관의 힘. 나는'^ (? =. * REP). *'가'CZECH | CZECHIA | BOHEMIA'의 모든 대안을 언급했다고 생각했습니다. –