如何在不新增列的情况下筛选含列表列的data.table?
无需新增列一步筛选data.table的列表列内容
可以直接在data.table的筛选条件(i参数位置)中完成判断,无需新增中间列,核心思路是直接对列表列的每个元素检查是否包含目标集合中的任意值:
library(data.table) # 生成数据 a = data.table(ggplot2::mpg)[, .(year, cyl, displ)] b = a[, list(list(year)), by=.(cyl, displ)] # 目标筛选集合 c = c("1999", "2000") # 一步完成筛选 b[sapply(V1, function(x) any(x %in% c))]
关键说明:
sapply(V1, function(x) any(x %in% c))会生成一个逻辑向量,每个元素对应b的一行,表示该行的V1列表是否包含c中的至少一个值- 使用
any()替代原方法的sum(...) > 0,逻辑更直观,且性能更优(找到第一个匹配项后就停止判断,无需遍历整个列表) - 此方法不会修改原
data.table对象,避免了新增列带来的冗余
内容的提问来源于stack exchange,提问作者dragon951
相关产品推荐
相关产品推荐

