は、どのように私は例えば、スペースに基づいて別の列を作成することができます:あなたは、実際の列の値をしたい場合はあなたの例はそうと、文字列内のスペースの数を探す
ANs 3
Column1 Column2 Column3 Column14
I am going out
は、どのように私は例えば、スペースに基づいて別の列を作成することができます:あなたは、実際の列の値をしたい場合はあなたの例はそうと、文字列内のスペースの数を探す
ANs 3
Column1 Column2 Column3 Column14
I am going out
を「私は外出しています」示すために、あなたはテキスト接続からテーブルを読み取ることができます。
> read.table(textConnection("I am going Out"))
V1 V2 V3 V4
1 I am going Out
あなたの質問のタイトルに答えるために、すなわちがあるかスペース多く、あなたは上記の列をカウントするncol
を使用することができ、 1を引く。あなたはスペースの数でだけ興味を持っている場合は、以下では、より効率的である:
length(gregexpr(" ", "I am going Out")[[1]])
これは、スペースを検索するための正規表現を使用しています。
[[1]]
は、結果のリストの最初の要素を取ります。これは、入力ベクトルの最初の項目に対応し、 "午前中"が唯一の要素です。そこに別のベクトルを渡した場合、リストには複数の要素が含まれている場合もあれば、空のベクトルの要素がない場合もあります。
にスペースがない場合は、gregexpr
はまだ試合がなかったことを示すために、試合の位置として-1
で、長さ1
のリストを返します。これにより、上記のコードはその場合に1つの結果を誤って報告します。それを扱っても、入力としてベクトルを受け入れ、より精巧な解決策は、以下の通りである。
countSpaces <- function(s) { sapply(gregexpr(" ", s), function(p) { sum(p>=0) }) }
次のように機能が動作します:gregexpr
は、入力の各要素に対してリスト結果の、1を返します。 ベクターs
。 sapply
はそのリストに対して反復処理を行い、リストの各要素に対して一致数を計算します。一致する位置のベクトルのlength
をカウントする代わりに、sum
を使用して、負でない値をカウントするだけで、一致しなかったために-1
が削除されます。その合計で起こっているFALSE/TRUE
から0/1
への暗黙の変換があります。 sapply
の結果は、やはりベクトルになり、したがって入力ベクトルとうまく一致します。
この関数は、one commentで要求されているように、データフレームを書き換えるために使用できます。だからfoo
という名前のデータフレームがあり、それはbar
という列に文字列があり、新しい列にこれらの数を含めるように変更する必要があるとします。baz
- I am going Out
- 2番目の引数で - 空のスペース
R> strsplit("I am going Out", " ")[[1]]
[1] "I" "am" "going" "Out"
だから我々は最初の引数を分割:あなたは、もう一つの方法は、strsplit
機能を使用することです
foo <- transform(foo, baz = countSpaces(bar))
+1。彼らは何を望むかによって、これはより適切かもしれません: '長さ(gregexpr(" [] + "、"私は外出しています ")[[1]])'(回答= 3)。そのフレーズ(余分なスペースを使用)では、使用した方法が各スペースをカウントします。 – A5C1D2H2I1M1N2O1R2T1
うん。コメントに複数のスペースを追加するにはどうすればよいですか? – A5C1D2H2I1M1N2O1R2T1
@mrdwab、http://meta.stackexchange.com/questions/30020/multiple-spaces-in-code-in-comments-get-merged-into-oneを参照してください。回避策:U + 00A0ユニコードコードポイントとして入力された非区切りスペースを使用します。 – MvG
としてこれを書くことができます。その後、我々はちょうどlength
を使用することができます。
R> length(strsplit("I am going Out", " ")[[1]])
[1] 4
しかし、私たちは言葉の数を知りたくありません。だから私はMvGの答えがより適切だと思う。 – rinni
私は@ MvGの答えが良いことに同意するが、私は "私たちは単語の数を知らない"あなたのコメントに従っていない – csgillespie
まあ、_spaces_の数と_words_の数を知りたい。あなたは単語の数を計算します。 – rinni
私は、これは可能性が何であるか、あなたが後にしているが、ではないかもしれないので、私は本当に慎重に読んでいない認めなければなりません。..
x <- "I am going Out"
nchar(x)- nchar(gsub(" ", "", x))
MVGのオリジナルの提案に代わるもの(以下かなりが):
as.data.frame(matrix(unlist(strsplit("I am going Out", "\\s+", perl=TRUE)), nrow=1))
またstringr
パッケージからstr_count
を使用することができます。これらはあまり冗長ではなく、正規表現を避けることは少し速くなる可能性があります。
library(stringr)
text = "I am going Out"
#matches regular expression
str_count(text, ' ')
それとも、あなたがより速く何か
#matches literal text
str_count(text, fixed(' '))
をしたい場合、私はあなたが後にしているかわからないんだけどけれどもおそらく、あなたは 'read.fwf'をしたいです。 –