R data.table如何通过rbindlist搭配Map实现按值行扩展
当然可以通过rbindlist搭配Map实现该需求,具体实现方式如下:
第一步:加载依赖&构造示例数据
library(data.table) x <- data.table(id=c('A1', 'B1'), start=c(1,1), stop=c(4,5))
第二步:核心实现代码
result <- rbindlist(Map(function(cur_id, cur_start, cur_stop) { # 生成当前行扩展后的所有start值 new_start <- cur_start:(cur_stop - 1) # 构造当前行扩展后的子data.table data.table(id = cur_id, start = new_start, stop = new_start + 1) }, x$id, x$start, x$stop))
逻辑说明
Map会逐行读取原表的id、start、stop取值,对每一行单独做扩展处理- 对每一行的起始值
cur_start和终止值cur_stop,生成从cur_start到cur_stop-1的整数序列作为新的start列,每个新start加1就是对应的stop值 - 最后用
rbindlist把Map返回的所有子data.table按行合并,即可得到你需要的扩展结果
内容的提问来源于stack exchange,提问作者R007
相关产品推荐
相关产品推荐

