web-dev-qa-db-ja.com

SQLのLIKE 'description%'ステートメントに相当するRとは何ですか?

他にこれを尋ねる方法がわかりませんが、いくつかの文字列要素内の用語を検索したいと思います。私のコードは次のようになります(ただし間違っています)。

inplay = vector(length=nrow(des))
for (ii in 1:nrow(des)) {
 if (des[ii] = 'In play%')
  inplay[ii] = 1
 else inplay[ii] = 0
}

desは、「Swinging Strike」、「In play(run(s))」、「In play(out(s)recording)」などの文字列を格納するベクトルです。インプレイに格納したいのは、1と0です。 desベクトルに対応するベクトル。1がinplayであり、desの値に「In play%」が含まれており、それ以外の場合は0であることを示します。

最後の要素に1を含む0のベクトルを返すだけなので、3行目は正しくないと思います。

前もって感謝します!

15
Albert Lyu

SQLのLIKEに類似したRは、Rの通常のインデックス構文です。

'LIKE'演算子は、指定された列の文字列値をユーザー指定のパターンと照合して、テーブルからデータ行を選択します

> # create a data frame having a character column
> clrs = c("blue", "black", "brown", "beige", "berry", "bronze", "blue-green", "blueberry")
> dfx = data.frame(Velocity=sample(100, 8), Colors=clrs)
> dfx
            Velocity    Colors
        1       90       blue
        2       94      black
        3       71      brown
        4       36      beige
        5       75      berry
        6        2     bronze
        7       89    blue-green
        8       93    blueberry

> # create a pattern to use (the same as you would do when using the LIKE operator)
> ptn = '^be.*?'  # gets beige and berry but not blueberry
> # execute a pattern-matching function on your data to create an index vector
> ndx = grep(ptn, dfx$Colors, Perl=T)
> # use this index vector to extract the rows you want from the data frome:
> selected_rows = dfx[ndx,]
> selected_rows
   Velocity Colors
     4       36  beige
     5       75  berry 

SQLでは、次のようになります。

SELECT * FROM dfx WHERE Colors LIKE ptn3
15
doug

data.tableパッケージ の構文は、多くの場合 SQLに類似 です。パッケージには%like%、これは「regexprを呼び出すための便利な関数」です。ヘルプファイルからの例を次に示します。

## Create the data.table:
DT = data.table(Name=c("Mary","George","Martha"), Salary=c(2,3,4))

## Subset the DT table where the Name column is like "Mar%":
DT[Name %like% "^Mar"]
##      Name Salary
## 1:   Mary      2
## 2: Martha      4
19
dnlbrky

regexpr

> d <- c("Swinging Strike", "In play (run(s))", "In play (out(s) recorded)")
> regexpr('In play', d)
[1] -1  1  1
attr(,"match.length")
[1] -1  7  7
> 

またはgrep

> grep('In play', d)
[1] 2 3
> 
2
Vince