如何在R的data.table中筛选出包含特定值的原始列
解决data.table筛选包含特定值的原始列方案
核心实现方法
你已经完成了列匹配的判断逻辑,只需要在判断结果的基础上提取对应列名,再直接选取原始列即可,示例代码如下:
library(data.table) # 示例数据集 dt <- data.table(a=c(1,2,3),b=c(4,5,6)) # 方法1:分步骤实现,可读性更高 # 1. 判断每列是否包含目标值6,提取符合条件的列名 target_cols <- names(which(dt[, lapply(.SD, function(x) any(x == 6))] == TRUE)) # 2. 提取对应原始列 result <- dt[, ..target_cols] # 若使用1.10.0之前的旧版本data.table,上述选取列的代码可替换为: # result <- dt[, target_cols, with = FALSE] # 方法2:一步完成,更符合data.table语法习惯 result <- dt[, .SD, .SDcols = sapply(dt, function(x) any(x == 6))]
输出结果
运行上述代码后,result即为你需要的包含目标值的原始列:
> result b 1: 4 2: 5 3: 6
注意事项
如果目标值包含NA,请将判断逻辑中的any(x == 目标值)替换为any(x %in% 目标值),避免== NA返回NA导致判断错误。如果有多个列同时包含目标值,上述方法会自动返回所有符合条件的原始列。
内容的提问来源于stack exchange,提问作者moth
相关产品推荐
相关产品推荐

