4

私はRと正規表現の両方で非常に錆びています。Rの正規表現ヘルプファイルを読んでみましたが、まったく役に立ちませんでした。

3列のデータフレームがあります。

  1. 語彙、つまり、コーパスで見つかった500の最も一般的な単語のリスト
  2. カウント、単語が出現した回数、および
  3. 確率、カウントをすべての単語カウントの合計で割ったもの

リストは最も一般的なものから最も一般的でないものへと並べられているため、アルファベット順には並べられていません。

同じ文字で始まるすべての単語の行全体を引き出す必要があります。(すべてのアルファベットをループする必要はありません。1文字の結果が必要です。)

正規表現についてだけでなく、Rで記述する方法を尋ねているので、新しいデータフレームで結果を取得します。

4

2 に答える 2

5

あなたが使用することができますgrep

df <- data.frame(words=c("apple","orange","coconut","apricot"),var=1:4)
df[grep("^a", df$words),]

どちらが与えるでしょう:

    words var
1   apple   1
4 apricot   4
于 2013-02-04T11:10:57.190 に答える
1

多分これはあなたのために役立つでしょう。

# Creating some data
 set.seed(001)
    count <- sample(1:100, 6, TRUE)
    DF <- data.frame(vocabulary=c('action', 'can', 'book', 'candy', 'any','bar'),
                     count=count,
                     probability=count/sum(count)
                     )

# Spliting by the first letter
Split <- lapply(1:3, function(DF, i){
  DF[grep(paste0('^', letters[i]), DF$vocabulary),]
}, DF=DF)

Split
[[1]]
      vocabulary count probability
1     action    27  0.08307692
5        any    21  0.06461538

[[2]]
  vocabulary count probability
3       book    58   0.1784615
6        bar    90   0.2769231

[[3]]
  vocabulary count probability
2        can    38   0.1169231
4      candy    91   0.2800000

結果がリストであることがわかるように、すべてのアルファベット文字を考慮に入れるために1:3、withでlapplycallを変更することをお勧めします。1:26

結果は劣化していないことに注意してください。ただし、これはパッケージorderByの関数を使用して簡単に実行できます。doBy

 lapply(Split, function(x) orderBy(~vocabulary, data=x ))
[[1]]
  vocabulary count probability
1     action    27  0.08307692
5        any    21  0.06461538

[[2]]
  vocabulary count probability
6        bar    90   0.2769231
3       book    58   0.1784615

[[3]]
  vocabulary count probability
2        can    38   0.1169231
4      candy    91   0.2800000
于 2013-02-04T11:13:51.240 に答える