質問

私もトラブルを先頭と末尾に空白文字にデータです。フレーム。例えば、うち特定 row a 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".のマッチングの方法でやらねばならない。

  1. ある素敵なショーでの空白が自分の画面のように認識している問題なのでしょうか。
  2. でI削除、先頭または末尾の空白文字R?

これまで使った書簡 Perl スクリプトを除去する空白文字でコミュニケーションを取り合いでなんだかんだ内R.

役に立ちましたか?

解決

おそらく最良の方法は、あなたのデータファイルを読み込むときに、末尾の空白を処理することです。あなたがread.csvread.tableを使用する場合は、parameterstrip.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を使用します。 パッケージには、手動の2月15,2013日付とCRANにあるしています。 この関数は、文字列ベクトルを扱うことができます。

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"

:あなたが直接変更の引数で呼び出すことができprint.data.frame空白を表示するには、

AD1)

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パッケージからトリム()関数によって達成される可能性があります
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"   

最善の方法であるtrimws()

次のコードは、全体のデータフレーム

にこの機能を適用します
  

mydataframe < - data.frame(lapply(mydataframe、trimws)、stringsAsFactors = FALSE)

私はトリムを試してみました()。ホワイトスペースだけでなく、「\ nを」でうまく動作します。 X = '\ Nハーデン、J. \ n'

トリム(X)

myDummy[myDummy$country == "Austria "] <- "Austria"

この後は、レベルとして「オーストリア」を認識しないようにRを強制する必要があります。あなたはまた、レベルとして「USA」と「スペイン」を持っているふりをしてみましょう。

myDummy$country = factor(myDummy$country, levels=c("Austria", "USA", "Spain"))
最高の応答を投票し、それはまだ動作するはずですよります。

少し威圧

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top