홈>
이 및 이 이지만 내 데이터를 처리 할 수는 없습니다
# here my data
data <- data.frame(text = c("SOME UPPERCASES And some Lower Cases"
,"OTHER UPPER CASES And other words"
, "Some lower cases AND UPPER CASES"
,"ONLY UPPER CASES"
,"Only lower cases, maybe"
,"UPPER lower UPPER!"))
data
text
1 SOME UPPERCASES And some Lower Cases
2 OTHER UPPER CASES And other words
3 Some lower cases AND UPPER CASES
4 ONLY UPPER CASES
5 Only lower cases, maybe
6 UPPER lower UPPER!
원하는 결과는 다음과 같아야합니다 :
V1 V2
1 SOME UPPERCASES And some Lower Cases
2 OTHER UPPER CASES And other words
3 AND UPPER CASES Some lower cases
4 ONLY UPPER CASES NA
5 NA Only lower cases, maybe
6 UPPER UPPER! lower
따라서 모든 단어는 대문자 만 사용하고 다른 단어는 대문자로 구분하십시오.
테스트로 한 줄만 시도했지만 어떤 것도 잘 작동하지 않습니다.
strsplit(x= data$text[1], split="[[:upper:]]") # error
gsub('([[:upper:]])', ' \\1', data$text[1]) # not good results
library(reshape)
transform(data, FOO = colsplit(data$text[1], split = "[[:upper:]]", names = c('a', 'b'))) # neither good results
- 답변 # 1
- 답변 # 2
stringi 패키지를 사용하는 접근법 :
library(stringi) l1 <- stri_extract_all_regex(dat$text, "\\b[A-Z]+\\b") l2 <- mapply(setdiff, stri_extract_all_words(dat$text), l1) res <- data.frame(all_upper = sapply(l1, paste, collapse = " "), not_all_upper = sapply(l2, paste, collapse = " "), stringsAsFactors = FALSE) res[res == "NA"] <- NA res[res == ""] <- NA
다음을 제공합니다 :
와이즈 비즈 와이즈 비즈 - 답변 # 3
> res all_upper not_all_upper 1 SOME UPPERCASES And some Lower Cases 2 OTHER UPPER CASES And other words 3 AND UPPER CASES Some lower cases 4 ONLY UPPER CASES <NA> 5 <NA> Only lower cases maybe 6 UPPER UPPER lower
관련 질문
- r : 패턴 문자열로 문자열의 하위 시퀀스를 마스킹하는 방법
- r : 정규식을 사용하여 특정 패턴의 문자 추출
- 패턴이 길 때 R에서 grepl을 사용하여 패턴 일치를 수행하려면 어떻게 해야 합니까?
- gsub를 사용한 R 정규식 표현
- r : 데이터 프레임 목록에 대한 괄호 안의 내용을 추출하여 여러 열의 이름 바꾸기
- 정규식을 사용하여 R의 문자열에서 일부를 제거하는 방법은 무엇입니까?
- R의 함수 내에서 부분 변수 이름 검색
- r : 특정 숫자 또는 문자 집합과 일치하는 정규식
- R에서 긴 벡터 줄이기
- R을 사용하여 문자열에서 "+" 및 "*" 기호의 위치 추출
데이터 :
코드 :
결과 :
<시간>트릭은 정규식입니다. 정규식을 배우십시오
최적화를 위해 Wiktor Stribiżew에게 감사합니다.