2017-02-03 8 views
0

私はnameclassを含むdata.tableを持っています。各nameは、classに属します。ここにサンプルデータセットを示します。列の同じ値を持つすべての行を行の1つとして抽出するにはどうすればよいですか?

library(data.table) 
DT <- data.table(name = c("John","Smith","Jane","Ruby","Emerald","Jasmine","Tulip"), 
       class = c(1,2,3)) 

特定の人物と同じクラスに属するすべての名前を取得したいとします(たとえば、John)。私は彼の名前は私が事前にgrepを行うデータセットにどのように表示されるかを正確に知っているし、この得ることはありません:

DT[class %in% DT[name %in% grep("john", DT[, name], ignore.case = T, value = T), class], 
    name] 

%in%をジョンという名前の複数の人が存在する場合、私はそれらすべてをキャッチすることを確認することです。おそらく参加を使用して、これを行うためにきれいな方法はありますか?

編集:私は正確に名前を知っていたし、それは一度だけ発生した場合は、上記の私が探している何

DT[class == DT[name == "John", class], name] 

に圧縮しますが、私が行うことができます「チェーン」ソリューション、のようなものですそれは優しくないように見えます。

私が探していたもの@Frank、によって示唆されるように
+1

私は 'data.table'の人ではありませんが、おそらくこれは? 'DT [(DT、class == class [name ==" John "])]' –

+5

join: 'DT [。(class [name ==" John "])、on =。(class )、name] ''?data.table'を参照し、詳細はhttp://r-datatable.com/Getting-Startedのvignettesを参照してください。名前のパターンしかない場合は、 'name ==" John "' – Frank

+0

の代わりに 'name%like%patt'を実行してください! @RonakShah、data.tableでは、 'with'は必要ありません。 – Naumz

答えて

0

、また

DT[.(class[name %like% "John"]), on=.(class), name] 

は、@ RonakShahの回答に基づいて、これは動作します。

DT[class == class[name %like% "John"])] 

リストはこのように索引付けすることができます。

関連する問題