我有一个包含name
和class
的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]
我正在寻找的东西就像一个“链接”解决方案,在这里我可以消除嵌套,因为它似乎不优雅。
答案 0 :(得分:0)
根据@Frank的建议,我在寻找的是,
DT[.(class[name %like% "John"]), on=.(class), name]
另外,根据@ RonakShah的回答,这很有效。
DT[class == class[name %like% "John"])]
我已经忘记了可以用这种方式索引列表。