R语言如何基于参考列表移除目标列表中多余的时间间隔元素
实现方案
我们可以通过匹配july中存在的「ID+10天间隔」组合,过滤jan的多余元素,代码实现如下:
library(purrr) library(dplyr) # 提取july中所有有效的ID、10天间隔标识组合 valid_pairs <- map_dfr(july, function(x) { data.frame( ID = unique(x$ID), interval_tag = unique(x$new) ) }) # 过滤jan列表,仅保留july中存在的组合对应的元素 jan_filtered <- keep(jan, function(item) { cur_id <- unique(item$ID) cur_tag <- unique(item$new) any(valid_pairs$ID == cur_id & valid_pairs$interval_tag == cur_tag) })
效果验证
执行代码后:
- 原
jan列表长度为9(3个ID × 3个时间间隔) - 过滤后的
jan_filtered长度为6(3个ID × 2个时间间隔),和july的间隔数完全对应,每个ID的第三个间隔元素已被移除。
如果你的场景中,两个列表相同ID的间隔顺序完全对齐(jan的第N个间隔对应july的第N个间隔,仅末尾多多余元素),也可以用更简化的截取方式:
# 按ID分组统计july中每个ID的间隔数 july_interval_cnt <- table(map_chr(july, ~unique(.x$ID))) # 对jan按ID分组后截取对应长度的元素 jan_filtered <- jan %>% split(~ID) %>% imap(~head(.x, july_interval_cnt[[.y]])) %>% unlist(recursive = FALSE)
内容的提问来源于stack exchange,提问作者John Huang
相关产品推荐
相关产品推荐

