3

データフレームの各行の単語数を調べたいとしましょう。したがって、次の例では、列1の最初の値が3語、2番目の値が4語というようになります。これはapply関数の1つのタスクだと思いますが、これを理解するのはほとんど運がありません。

dat = data.frame(one=c("That is Cool",
  "I like my bank", "He likes pizza", "What"))

関数を作成するときに関数strsplit()を使用する必要がありますか、それとも使用する方がよいですか?apply()apply(dat, 1, function(x)...

4

2 に答える 2

6

以下のコードは、すべての単語がスペースで区切られていると仮定して、それを実行する必要があります。

sapply(strsplit(as.character(dat$one), " "), length)
# [1] 3 4 3 1
于 2011-06-02T18:14:52.640 に答える
2

正規表現に基づく別のアプローチ。アイデアは、スペースを除くすべてを削除し、変更された文字列の長さを計算することです(つまり、スペースの数、つまり+1で単語の数を取得します)。

nchar(gsub("[^ ]", "", dat$one)) + 1
# [1] 3 4 3 1

また、先頭または末尾にスペースがある文字列を処理するための保護を追加することもできます。

nchar(gsub("[^ ]|^ *| *$", "", dat$one)) + 1
# [1] 3 4 3 1

例:

x <- c(" One two ", "One Two ", " One two")
nchar(gsub("[^ ]", "", x)) + 1
# [1] 4 3 3
sapply(strsplit(x, " "), length)
# [1] 3 2 3
nchar(gsub("[^ ]|^ *| *$", "", x)) + 1
# [1] 2 2 2

もう1つの安全チェック:繰り返されるスペースに対処する:

x <- " One    Two    "
nchar(gsub("[^ ]|^ *| *$", "", gsub(" +", " ", x))) + 1 
# [1] 2
于 2011-06-03T07:55:27.987 に答える