如何提取列中具有相同值的所有行作为其中一行?

时间:2017-02-03 17:23:19

标签: r data.table

我有一个包含nameclass的data.table。每个name属于一个class。这是一个示例数据集。

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

我希望得到与特定人物属于同一类别的所有姓名,例如约翰。我不知道他的名字在数据集中的确切显示方式,所以我事先做了grep,得到了这个:

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

%in%是为了确保如果有一个名叫John的人不止一个,我会抓住他们。有没有比这更漂亮的方法,也许使用join?

编辑:如果我确切地知道这个名字并且只发生一次,那么上面会压缩到,

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

我正在寻找的东西就像一个“链接”解决方案,在这里我可以消除嵌套,因为它似乎不优雅。

1 个答案:

答案 0 :(得分:0)

根据@Frank的建议,我在寻找的是,

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

另外,根据@ RonakShah的回答,这很有效。

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

我已经忘记了可以用这种方式索引列表。