R data.table如何统计落在每行min_val与max_val区间内的value行数
你原来的代码没有逐行读取当前行的上下限,而是直接对整列的min_val、max_val做向量比较,逻辑不符合需求,因此结果错误。
实现代码
首先构造示例数据:
library(data.table) dt <- data.table( value = c(94.001, 94.002, 94.003, 95), min_val = c(94.00, 94.00, 94.01, 94.98), max_val = c(94.02, 94.03, 94.04, 95.02) )
方法1:逐行计算(适合小数据量,写法简单)
按每一行分组统计符合条件的记录数:
dt[, count := sum(dt$value > min_val & dt$value < max_val), by = .I]
方法2:非等连接实现(适合大数据量,性能更高)
利用data.table的非等连接特性,避免逐行遍历,处理万行以上数据时效率提升明显:
dt[, count := dt[dt, on = .(value > min_val, value < max_val), .N, by = .EACHI]$N]
运行后得到的dt结果和你给出的示例完全一致:
value min_val max_val count 1: 94.001 94.00 94.02 1 2: 94.002 94.00 94.03 2 3: 94.003 94.01 94.04 2 4: 95.000 94.98 95.02 1
内容的提问来源于stack exchange,提问作者iuliux
相关产品推荐
相关产品推荐

