손질하는 방법을 선도하고 후행 공백?
-
20-09-2019 - |
문제
나는 몇 가지 문제가 선행 및 후행 공백에서는 데이터입니다.프레임입니다.예를 들어 나처럼 살펴정 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
를 조작하는 흰색 공간,사용 str_trim()에 stringr 패키지입니다.패키지가 설명자 Feb15,2013 에 크.함수를 처리할 수 있는 문자열이 비슷합니다.
install.packages("stringr", dependencies=TRUE)
require(stringr)
example(str_trim)
d4$clean2<-str_trim(d4$V2)
(신용가 주석:R.면)
간단한 기능 선행 및 후행 공백을 제거하려면 :
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"
(비어 없음) 문자열의 시작 부분에 일치하는 경우 출력의 첫 번째 요소는 ' ""'이지만 문자열 끝에 일치하는 경우 출력은 다음과 같습니다. 경기가 제거 된 상태에서.
나는 a 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"
가장 좋은 방법은 trimws ()입니다.
다음 코드는이 기능을 전체 데이터 프레임에 적용합니다
myDataFrame <-Data.Frame (lapply (myDataFrame, trimws), stringsasFactors = false)
나는 trim ()을 시도했다. ' n'뿐만 아니라 흰색 공간에서도 잘 작동합니다. x = ' n Harden, J. n'
트림 (x)
myDummy[myDummy$country == "Austria "] <- "Austria"
그 후, 당신은 "오스트리아"를 한 단계로 인식하지 않도록 강요해야합니다. "미국"과 "스페인"도 레벨로 척 봅시다.
myDummy$country = factor(myDummy$country, levels=c("Austria", "USA", "Spain"))
가장 높은 투표 응답보다 약간 덜 위협적이지만 여전히 작동해야합니다.