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
相关产品推荐
相关产品推荐

