You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R data.table如何匹配日期筛选var1-var3日期一致的唯一ID

解法代码

你可以通过过滤无关变量、长表转宽表、条件筛选三步实现需求,完整可运行代码如下:

library(data.table)

# 原始数据构造
data1 <- data.table(
  id = c(seq(1:5)),
  date = c(as.Date("2021-05-05"),as.Date("2021-05-04"),as.Date("2021-05-03"),as.Date("2021-05-02"),as.Date("2021-05-01")),
  var = c(rep("var1",5))
)
data2 <- data.table(
  id = c(seq(1:5)),
  date = c(as.Date("2021-05-05"),as.Date("2020-05-04"),as.Date("2020-05-03"),as.Date("2020-05-02"),as.Date("2020-05-01")),
  var = c(rep("var2",5))
)
data3 <- data.table(
  id = c(seq(1:5)),
  date = c(as.Date("2021-05-05"),as.Date("2020-07-04"),as.Date("2020-07-03"),as.Date("2020-07-02"),as.Date("2020-07-01")),
  var = c(rep("var3",5))
)
data4 <- data.table(
  id = c(seq(1:5)),
  date = c(as.Date("2021-05-05"),as.Date("2020-07-04"),as.Date("2020-07-03"),as.Date("2020-07-02"),as.Date("2020-07-01")),
  var = c(rep("var4",5))
)
data <- rbind(data1,data2,data3,data4)
data <- data[order(id)]

# 核心处理逻辑
## 过滤无关的var4数据
dt_filter <- data[var %in% c("var1", "var2", "var3")]
## 长表转宽表,生成date_varX格式列名
dt_wide <- dcast(dt_filter, id ~ var, value.var = "date")
setnames(dt_wide, old = c("var1", "var2", "var3"), new = paste0("date_", c("var1", "var2", "var3")))
## 筛选三个日期完全相等的ID
data_final <- dt_wide[date_var1 == date_var2 & date_var2 == date_var3]

# 结果输出
print(data_final)

运行后得到的data_final和要求的输出格式完全一致:

id date_var1 date_var2 date_var3
1:  1 2021-05-05 2021-05-05 2021-05-05

内容的提问来源于stack exchange,提问作者epiNS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 02:24:04