선행 및 후행 공백을 자르는 방법?
data.frame에서 선행 및 후행 공백에 문제가 있습니다. 예를 들어 특정 조건을 기반으로 특정 row을 살펴보고 싶습니다 data.frame.
> myDummy[myDummy$country == c("Austria"),c(1,2,3:7,19)]
[1] codeHelper country dummyLI dummyLMI dummyUMI
[6] dummyHInonOECD dummyHIOECD dummyOECD
<0 rows> (or 0-length row.names)
오스트리아가 분명히 내 나라에 있었던 이후로 왜 내가 예상 한 결과를 얻지 못했는지 궁금했습니다 data.frame. 내 코드 기록을 살펴보고 무엇이 잘못되었는지 알아 내려고 시도한 후에 시도했습니다.
> myDummy[myDummy$country == c("Austria "),c(1,2,3:7,19)]
codeHelper country dummyLI dummyLMI dummyUMI dummyHInonOECD dummyHIOECD
18 AUT Austria 0 0 0 0 1
dummyOECD
18 1
내가 명령에서 변경 한 것은 오스트리아 다음에 추가 공백입니다.
더 성가신 문제가 분명히 발생합니다. 예를 들어 국가 열을 기준으로 두 프레임을 병합하려고합니다. 하나 data.frame는 "Austria "다른 프레임이있는 동안 사용합니다 "Austria". 일치하지 않습니다.
- 문제를 알 수 있도록 화면에 공백을 '표시'하는 좋은 방법이 있습니까?
- R에서 선행 및 후행 공백을 제거 할 수 있습니까?
지금까지 Perl공백을 제거 하는 간단한 스크립트 를 작성 했지만 R에서 어떻게 든 할 수 있다면 좋을 것입니다.
아마도 가장 좋은 방법은 데이터 파일을 읽을 때 후행 공백을 처리하는 것입니다. 매개 변수 를 사용 read.csv하거나 read.table설정할 수 있습니다 strip.white=TRUE.
나중에 문자열을 정리하려면 다음 기능 중 하나를 사용할 수 있습니다.
# returns string w/o leading whitespace
trim.leading <- function (x) sub("^\\s+", "", x)
# returns string w/o trailing whitespace
trim.trailing <- function (x) sub("\\s+$", "", x)
# returns string w/o leading or trailing whitespace
trim <- function (x) gsub("^\\s+|\\s+$", "", x)
이 기능 중 하나를 사용하려면 다음을 수행하십시오 myDummy$country.
myDummy$country <- trim(myDummy$country)
사용할 수있는 공백을 '표시'하려면 다음을 수행하십시오.
paste(myDummy$country)
공백을 쉽게 찾을 수 있도록 따옴표 ( ")로 묶인 문자열을 표시합니다.
R 3.2.0부터는 선행 / 후행 공백을 제거하기위한 새로운 기능이 도입되었습니다.
trimws()
참조 : http://stat.ethz.ch/R-manual/R-patched/library/base/html/trimws.html
공백을 조작하려면 stringr 패키지에서 str_trim ()을 사용하십시오. 이 패키지는 2013 년 2 월 15 일자 매뉴얼이며 CRAN입니다. 이 함수는 문자열 벡터를 처리 할 수도 있습니다.
install.packages("stringr", dependencies=TRUE)
require(stringr)
example(str_trim)
d4$clean2<-str_trim(d4$V2)
(신용은 논평자에게 간다 : R. Cotton)
선행 및 후행 공백을 제거 하는 간단한 기능 :
trim <- function( x ) {
gsub("(^[[:space:]]+|[[:space:]]+$)", "", x)
}
용법:
> text = " foo bar baz 3 "
> trim(text)
[1] "foo bar baz 3"
ad1) 공백을 보려면 print.data.frame수정 된 인수로 직접 호출 할 수 있습니다 .
print(head(iris), quote=TRUE)
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1 "5.1" "3.5" "1.4" "0.2" "setosa"
# 2 "4.9" "3.0" "1.4" "0.2" "setosa"
# 3 "4.7" "3.2" "1.3" "0.2" "setosa"
# 4 "4.6" "3.1" "1.5" "0.2" "setosa"
# 5 "5.0" "3.6" "1.4" "0.2" "setosa"
# 6 "5.4" "3.9" "1.7" "0.4" "setosa"
?print.data.frame다른 옵션 도 참조하십시오 .
grep 또는 grepl을 사용하여 공백과 하위가있는 관측치를 찾아 제거하십시오.
names<-c("Ganga Din\t","Shyam Lal","Bulbul ")
grep("[[:space:]]+$",names)
[1] 1 3
grepl("[[:space:]]+$",names)
[1] TRUE FALSE TRUE
sub("[[:space:]]+$","",names)
[1] "Ganga Din" "Shyam Lal" "Bulbul"
user56의 의견으로 답변을 추가하고 싶지만 독립 답변으로 쓸 수는 없습니다. 선행 및 후행 공백을 제거하려면 gdata 패키지의 trim () 함수를 사용하십시오.
require(gdata)
example(trim)
사용 예 :
> trim(" Remove leading and trailing blanks ")
[1] "Remove leading and trailing blanks"
또 다른 옵션은 패키지 의 stri_trim기능 을 사용하여 stringi기본적으로 선행 및 후행 공백을 제거하는 것입니다.
> x <- c(" leading space","trailing space ")
> stri_trim(x)
[1] "leading space" "trailing space"
선행 공백 만 제거하려면을 사용하십시오 stri_trim_left. 후행 공백 만 제거하려면을 사용하십시오 stri_trim_right. 다른 선행 또는 후행 문자를 제거하려면을 사용하여 지정해야합니다 pattern =.
자세한 내용은 참조하십시오 ?stri_trim.
입력 사이에 공백이 여러 개인 경우 다른 관련 문제가 발생합니다.
> a <- " a string with lots of starting, inter mediate and trailing whitespace "
그런 다음 일반 표현식을 사용하여이 문자열을 "실제"토큰으로 쉽게 분할 할 수 있습니다 split.
> strsplit(a, split=" +")
[[1]]
[1] "" "a" "string" "with" "lots"
[6] "of" "starting," "inter" "mediate" "and"
[11] "trailing" "whitespace"
비어 있지 않은 문자열의 시작 부분에 일치가 있으면 출력의 첫 번째 요소는 ' ""'이지만 문자열 끝에 일치하는 경우 출력은 다음과 같습니다. 일치하는 항목이 제거되었습니다.
trim.strings ()선행 및 후행 공백을 다음과 같이 트리밍 하는 기능을 만들었습니다 .
# Arguments: x - character vector
# side - side(s) on which to remove whitespace
# default : "both"
# possible values: c("both", "leading", "trailing")
trim.strings <- function(x, side = "both") {
if (is.na(match(side, c("both", "leading", "trailing")))) {
side <- "both"
}
if (side == "leading") {
sub("^\\s+", "", x)
} else {
if (side == "trailing") {
sub("\\s+$", "", x)
} else gsub("^\\s+|\\s+$", "", x)
}
}
예를 들어,
a <- c(" ABC123 456 ", " ABC123DEF ")
# returns string without leading and trailing whitespace
trim.strings(a)
# [1] "ABC123 456" "ABC123DEF"
# returns string without leading whitespace
trim.strings(a, side = "leading")
# [1] "ABC123 456 " "ABC123DEF "
# returns string without trailing whitespace
trim.strings(a, side = "trailing")
# [1] " ABC123 456" " ABC123DEF"
가장 좋은 방법은 다듬기 ()
다음 코드는이 기능을 전체 데이터 프레임에 적용합니다
mydataframe <-data.frame (lapply (mydataframe, trimws), stringsAsFactors = FALSE)
trim ()을 시도했습니다. 공백 및 '\ n'과 잘 작동합니다. x = '\ n 강화, J. \ n'
트림 (x)
myDummy[myDummy$country == "Austria "] <- "Austria"
그런 다음 R이 "오스트리아"를 레벨로 인식하지 않도록해야합니다. 레벨이 "USA"및 "Spain"인 것처럼 가정하십시오.
myDummy$country = factor(myDummy$country, levels=c("Austria", "USA", "Spain"))
가장 높은 투표 응답보다 조금 덜 위협적이지만 여전히 효과가 있습니다.
참고 URL : https://stackoverflow.com/questions/2261079/how-to-trim-leading-and-trailing-whitespace
'development' 카테고리의 다른 글
| Android에서 예 / 아니요 대화 상자를 표시하는 방법은 무엇입니까? (0) | 2020.03.02 |
|---|---|
| UITableView에서 빈 셀을 제거하는 방법은 무엇입니까? (0) | 2020.03.02 |
| 일반 방법을 숫자 유형으로 제한하는 제약 조건이 있습니까? (0) | 2020.03.02 |
| 복사 제거 및 반환 값 최적화 란 무엇입니까? (0) | 2020.03.02 |
| MySQL에서 하나를 제외한 모든 열을 선택 하시겠습니까? (0) | 2020.03.02 |