web-dev-qa-db-ja.com

部分文字列の一致に基づいてR data.table行を選択する方法(SQLなど)

文字列を持つdata.tableがあり、その中に部分文字列を含む行のみを選択したい。 SQL WHERE x LIKE '%substring%'と同等

例えば。

> Months = data.table(Name = month.name, Number = 1:12)
> Months["mb" %in% Name]
Empty data.table (0 rows) of 2 cols: Name,Number

Nameに「mb」が含まれる行のみを選択するにはどうすればよいですか?

47
Corone

_data.table_にはlike関数があります。

_Months[like(Name,"mb")]
        Name Number
1: September      9
2:  November     11
3:  December     12
_

または、_%like%_はより見栄えが良い:

_> Months[Name %like% "mb"]
    Name Number
1: September      9
2:  November     11
3:  December     12
_

_%like%_およびlike()は、grepl(整数位置を返す)ではなく、grep(論理ベクトルを返す)を使用することに注意してください。そのため、他の論理条件と組み合わせることができます。

_> Months[Number<12 & Name %like% "mb"]
        Name Number
1: September      9
2:  November     11
_

また、(%または*ワイルドカードだけでなく)正規表現検索の機能も利用できます。

81
Matt Dowle

演算子_%in%_は、値の別のセット、つまり"a" %in% c("a","b","c")に値が存在するかどうかを見つけるために使用される部分的な文字列一致を行いません

部分的な文字列照合を行うには、grep()関数を使用する必要があります。 grepを使用して、_"mb"_を含むすべての列のインデックスを返すことができます。次に、そのインデックスで行をサブセット化します

_Months[grep("mb", Name)]    # data.table syntax slightly easier
_
9
LostLin