R の grep() と grep() の比較: 違いは何ですか?


R でよく混同される 2 つの関数は、 grep()grep()です。どちらの関数でも、文字列内に特定のパターンが存在するかどうかを確認できますが、異なる結果が返されます。

  • grep() は、文字列にパターンが存在する場合に TRUE を返します。
  • grep() は、パターンを含む文字列インデックスのベクトルを返します。

次の例は、この違いを示しています。

 #create a vector of data
data <- c('P Guard', 'S Guard', 'S Forward', 'P Forward', 'Center')

grep ('Guard', data)
[1] 1 2

grepl ('Guard', data) 
[1] TRUE TRUE FALSE FALSE FALSE

次の例は、これらの関数の一方を他方よりも使用する必要がある場合を示しています。

grep() を使用する場合

1. 特定の文字列を含む行をフィルタリングする

grep()の最も一般的な使用法の 1 つは、特定の文字列を含むデータ フレーム内の行をフィルター処理することです。

 library(dplyr)

#create data frame
df <- data.frame(player = c('P Guard', 'S Guard', 'S Forward', 'P Forward', 'Center'),
                 points = c(12, 15, 19, 22, 32),
                 rebounds = c(5, 7, 7, 12, 11))

#filter rows that contain the string 'Guard' in the player column
df %>% filter( grepl ('Guard', player))

   player points rebounds
1 P Guard 12 5
2 S Guard 15 7

関連: dplyr を使用して特定の文字列を含む行をフィルタリングする方法

grep() を使用する場合

1. 特定の文字列を含む列を選択します

grep()を使用して、特定の文字列を含むデータ フレーム内の列を選択できます。

 library(dplyr)

#create data frame
df <- data.frame(player = c('P Guard', 'S Guard', 'S Forward', 'P Forward', 'Center'),
                 points = c(12, 15, 19, 22, 32),
                 rebounds = c(5, 7, 7, 12, 11))

#select columns that contain the string 'p' in their name
df %>% select( grep ('p', colnames(df)))

     player points
1 P Guard 12
2 S Guard 15
3S Forward 19
4P Forward 22
5 Center 32

2. 特定の文字列が含まれる行数を数える

grep()を使用すると、特定の文字列を含むデータ フレーム内の行数をカウントできます。

 #create data frame
df <- data.frame(player = c('P Guard', 'S Guard', 'S Forward', 'P Forward', 'Center'),
                 points = c(12, 15, 19, 22, 32),
                 rebounds = c(5, 7, 7, 12, 11))

#count how many rows contain the string 'Guard' in the player column
length( grep ('Guard', df$player))

[1] 2

その他の R チュートリアルはここで見つけることができます。

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です